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)