지금까지 많은 문자열 내부에서 내가 필요한 문자열 찾아내는게 파싱이라는 거라는걸 알았다....
아. 파싱이라는 말은 많이 들어봤고, 또 이게 문자열을 내가 필요한 형태로 변환한다? 라는 뜻인줄은
알았는데 이게 내가 힘들게 하고있는건줄은 몰랐다. 파이썬 파싱에는 현재 검색해본바로 두가지
방법이 있는데.. beautifulsoup라는 모듈을 사용하는것과 정규표현식을 사용하는 것이다.
현재 정규표현식이 되게 편하다고 생각되어 beautifulsoup는 사용할 필요성을 못 느끼겠으나...
언젠가 왠지 필요하게 될거같아 다음에 시간날때 익혀 봐야겠다. 정규표현식 연습을 위해
이전 문제들중에 문자열 가져오는 방법이 더러웠던 것들을 모아 정규표현식으로 다시 풀어보았다.
import urllib2,re page = urllib2.urlopen(urllib2.Request('http://www.pythonchallenge.com/pc/def/ocr.html')).read() find = re.findall('[a-z]',page.split('')[0]) print ''.join(find)
#one = int(read[read.find('random number')+14:read.find('random number')+22]) #첫번째 랜덤한 숫자를 가져옴.... one = int(re.findall('number (\d+) by',read)[0]) #hash = read[read.find('hash" value="')+13:read.find('hash" value="')+45] #해쉬값을 가져옴.. hash = re.findall('"hash" value="([0-9a-z]*)"',read)[0] #숫자,영어소문자가 계속 반복 될수 있다. #time = read[read.find('me]" value="')+12:read.find('me]" value="')+22] #시간값을 가져옴.. time = re.findall('"E\[time\]" value="([0-9]*)" />',read)[0] #주의할점.. 정규표현식에서 쓰이는 [는 \[로 정규표현식 문자가 아닌걸 알려야 함.
#src = page[page.find('++'):page.find('.<br /><br /><br />')+1] src = re.findall('auto;">\s*<br />(.*?)<br />',page)[0]
추가 예정... 근데 이거하면서 알아낸건데 올린 코드가 티스토리에 올릴때 태그가 제거된다던지,
문자가 인코딩이 조금 변형된다던지 그래서 내가할땐 풀렸는데 올린 코드를 복붙했을때
안되는 문제가 발견됬다. 알아서 고치길......
'Python > 2.7 information' 카테고리의 다른 글
pytesser모듈. (0) | 2014.12.19 |
---|---|
Tkinter(python gui) (0) | 2014.11.22 |
소켓 파일 업로드 (webhacking.kr 37) (0) | 2014.10.25 |
유효한 웹페이지 찾기? (0) | 2014.10.17 |
소켓과 urllib2 속도차이 (2) | 2014.08.21 |