기타 BeautifulSoup 객체
- beautifulSoup객체
- Tag 객체
- NavigableString객체 (태그 안에 들어가 있는 텍스트를 나타낸다)
- Comment객체 (주석 태그 안에 들어있는 HTML 주석을 찾는데 사용한다)
2.2.3 트리이동
ex) ` bsobj.body.h1`은 body의 자손인 첫 번째 h1 태그를 선택한다.
(자식만 찾을 때는 .children 사용) (책에서는 자식과 자손을 구분하라고 한다. 차이가 궁금하다면 아래의 예제 참조) (자식: 부모 아래 자식, 당자만 선택 자손 : 부모 안에 속해있는 모든 것들 선택)
형제 다루기
타이틀 행을 선택하고 next_siblings를 호출하면 타이틀 행을 제외한 모든 테이블 행을 선택하게 됩니다.
※ 스크래이퍼를 견고하게 만들려면 항상 태그가 가능한한 명확하게 선택하는 것이 최선
※ previous_siblings 함수도 있다. ※ 부모를 찾는 함수는 .parent, .parents
2.3 정규표현식
정규표현식은 문자열이 주어진 규칙에 일치하는지, 일치하지 않는지 판단할 수 있다. 긴 문서에서 전화번호나 이메일 주소 같은 문자열을 빠르게 찾아보려 할 때 유용하다.
정규표현식은 -> 크롤링 하면서 필요한 부분 적용할 때 다시 공부하자.
예제
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj = BeautifulSoup(html, "html.parser")
images = bsObj.findAll("img", {"src":re.compile("\.\.\/img\/gifts/img.*\.jpg")})
for image in images:
print(image["src"])
=> ../img/gifts/img로 시작해서 .jpg로 끝나는 이미지의 상대경로만 출력하는 문제.
2.5 속성에 접근하기
예를 들어 URL이 href 속성에 들어있는 <a>태그, 타겟 이미지가 src 속성에 들어있는 <img> 태그의 경우, 해당 속성에 관심이 있기 마련이다.
다음과 같이 태그 객체에 접근할 수 있다.
myTag.attrs
결과는 전형적인 파이썬 딕셔너리 객체. 예를 들어 이미지의 소스 위치는 다음과 같이 찾는다.
myImgTag.attrs['src']
2.6 람다표현식
람다 표현식은 생략
2.7 BeautifulSoup외에 다른 파서도 존재.
Lxml, Html 파서 같은 것들이 있다.
참고자료
파이썬으로 웹 크롤러 만들기 (라이언 미첼 지음, 한선용 옮김, 한빛 미디어)
이진석 선생님 강좌 사이트 nomade