Post

HTML 스크래핑

HTML 스크래핑

HTML 스크래핑

  • BeautifulSoup 라이브러리 활용

BeautifulSoup 역할

  • HTML 문자열을 Element 객체로 바꿔줌
  • DOM 구조로 만들기 위해서는 반드시 전체 HTML 구조가 필요 -> html.parser

파싱이란?

정수를 실수로 바꾸거나 문자열 등으로 바꿀 수 있는 걸 type casting
문자열을 내가 원하는 다른 타입으로 바꾸게 되는걸 pasing이라고 함. -> HTML 문자열을 내가 원하는 타입 DOM 구조로 바꿈

find (데이터찾기)

1
2
3
4
5
6
7
8
9
10
11
12
html_str = """
<html>
  <head>
    <title>안녕하세요</title>
  </head>
  <body>
    <div id="container">
      <p class='p1'>hello</p>
      <p>Bye</p>
    </div>
  </body>
</html>"""
1
soup = BeautifulSoup(html_str, 'html.parser')
  • find(“태그명”, “속성 값을 딕셔너리”) : 한 개의 엘리먼트만 찾기
    ex. soup.find(“div”,{“id” : “container”}).text 엘리먼트 안에 있는 Text를 가져오겠다.

  • find_all(“태그명”,”속성 값 딕셔너리”) : 야러 개 찾기(리스트)
    ex. soup.find_all(“p”) -> .text 사용 불가 -> 왜? 리스트 형식이기 때문

특수한 상황에서만 사용

nextSibling : 바로 밑에 형제 p_p1 = soup.find(“p”,{“class”:”p1”}) -> hello
p_P1.nextSibling -> ‘\n’ # Enter키를 쳤기 때문에 자동으로 생성
p_P1.nextSibling.nextSibling -> ‘Bye’

1
2
3
4
5
6
7
8
<!-- 보여지는 HTML -->
<p class = 'p1'>hello</>
<p>Bye</p>

<!-- 실제 HTML -->
<p class = 'p1'>hello</>
===사이에 Enter(\n) 들어감===
<p>Bye</p>

selector (선택자를 사용해서 데이터 추출)

soup.select(선택자) : 선택자에 의해 엘리머트를 여러 개선택
ex. soup.select_one(“#container”)
soup.select_ont(선택자) : 선택자에 의해 엘리먼트를 한 개만 선택
soup.select_one(“#container > .p1”).text

속성값 추출

언제하냐면 쿠팡의 상품 목록 페이지에서 클릭하면 해당 상품 상세 페이지로 들어감
soup.select_one(".p1")["class"] = soup.select_one(".p1").get("class)

This post is licensed under CC BY 4.0 by the author.