import re
from html import unescape
# 이전 절에서 다운로드한 파일을 열고 html이라는 변수에 저장합니다.
with open('dp.html') as f:
html = f.read()
# re.findall()을 사용해 도서 하나에 해당하는 HTML을 추출합니다.
for partial_html in re.findall(r'<td class="left"><a.*?</td>', html, re.DOTALL):
# 도서의 URL을 추출합니다.
url = re.search(r'<a href="(.*?)">', partial_html).group(1)
url = 'http://www.hanbit.co.kr' + url
# 태그를 제거해서 도서의 제목을 추출합니다.
title = re.sub(r'<.*?>', '', partial_html)
title = unescape(title)
print('url:', url)
print('title:', title)
print('---')
re 모듈을 읽어 들입니다.
› import re
# re.search() 함수를 사용하면 두 번째 매개변수의 문자열이 첫 번째 매개변수의 정규 표현식에 맞는지 확 인할 수 있습니다.
# 맞는 경우 Match 객체를 반환합니다. 맞지 않으면 None을 반환합니다.
# 다음 예에서는 Match 객체가 반환됐습니다.
# match='abc'를 보면 abc가 매치된 것을 확인할 수 있습니다.
》 re.search(T'a.*', *c', )
<sre. SRE_Match object; span=(0, 3), match='abc'>
# 다음 예는 정규 표현식에 맞지 않으므로 None을 반환합니다.
# 인터랙티브 셀에서는 결과가 없을 경우 곧바로 다음 프롬프트(>)을 출력합니다.
»»> re. search(r'a.*d'
', 'abc123DEF')
# 세 번째 매개변수로 옵션을 지정합니다.
# Te.IGNORECASE (또는 re.T)를 지정하면 대소문자를 무시합니다.
# 이외에도 굉장히 다양한 옵션이 있습니다.
»»> re.search(r'a.*d', 'abc123DEF', re. IGNORECASE)
<sre.SRE_Match object; span=(0, 7), match='abc123D'>
# Match 객체의 group() 메서드로 일치한 값을 추출합니다.
# 매개변수에 0을 지정하면 매치된 모든 값을 반환합니다.
›> m= re search(r'a(.*)c', 'abc123DEF')
›› m.group(0)
'abc'
# 매개변수에 1 이상의 숫자를 지정하면 정규 표현식에서 ()로 감싼 부분에 해당하는 값을 추출합니다.
# 1이라면 1번째 그룹, 2라면 2번째 그룹이 추출됩니다.
> m.group (1)
'b'
# re.findall() 함수를 사용하면 정규 표현식에 맞는 모든 부분을 추출할 수 있습니다.
# 다음 예에서는 2글자 이상의 단어를 모두 추출합니다.
* \w는 유니코드로 글자를 비교합니다. 이 밖에도 공백 문자는 \s 등으로 추출할 수 있습니다.
»> re.findall(r'|w{2,}', 'This is a pen')
['This is a pen')
# re.sub() 함수를 사용하면 정규 표현식에 맞는 부분을 바꿀 수 있습니다.
# 3번째 매개변수에 넣은 문자열에서 첫 번째 정규 표현식에 맞는 부분을 # 2번째 매개변수로 변경합니다.
》 re.sub(r'\w{2,}', 'That', 'This is a pen')
'That That a That'
'[업무 지식] > Crawling' 카테고리의 다른 글
[저장하기] CSV 형식으로 저장하기 (0) | 2024.12.31 |
---|---|
[RSS 파싱] XML(RSS) 스크레이핑 (0) | 2024.12.31 |
[문자 코드 다루기] meta 태그에서 인코딩 방식 추출하기 (0) | 2024.12.31 |
[문자 코드 다루기] 인코딩 방식을 추출하고 디코딩하기 (0) | 2024.12.31 |
[Selenium] 경기도 주유소 데이터 (0) | 2024.11.24 |