crawling - 고급 HTML 분석

기타 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

0%