[WEB] 웹 스크래핑

sudog·2023년 10월 10일
0

WEB

목록 보기
7/9

웹을 탐색하며 페이지 정보를 수집하는 것을 크롤링이라 하고, 가져온 페이지를 파싱해서 데이터를 긁어내는 것을 스크래핑이라 한다.

python에서는 BeautifulSoup를 사용해서 웹 페이지를 파싱하고 원하는 요소를 셀렉터로 뽑아낼 수 있다.

먼저, 다음과 같이 필요한 모듈을 설치 후 임포트한다.

import requests
from bs4 import BeautifulSoup, SoupStrainer

이제 requests를 사용해서 원하는 웹 페이지의 url에 get 요청을 보내야 한다. 그 전에, 요청 헤더에 User-Agent 값을 담아야 한다. 이것은 요청을 보내는 주체가 누구인지 서버에 알리는 역할을 한다. 예를 들어, 크롬 브라우저의 경우엔 아래와 같다.

USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
response = requests.get(f"{PAGE_URL}{product_id}", headers=headers)

if response.status_code == 200:
	# 파싱
else:
	# 요청 실패

응답 상태 코드를 확인하고 성공한 경우에만 파싱을 진행한다.

...
# 파싱
only_product_info = SoupStrainer("div", attrs={"id": "page_product_detail"})
soup = BeautifulSoup(
	response.text,
    "lxml",
    parse_only=only_product_info,
).findChild()

이렇게 SoupStrainer 객체를 parse_only 속성에 넣으면 선택한 속성과 그 속성의 하위 속성만을 가져올 수 있다.

page = soup.find("div", "page_detail_product", recursive=False)

기본적으로 요소를 탐색할 때, DFS로 탐색하기 때문에 html문서의 구조를 알고 있다면 자식 요소만을 탐색하도록 recursive=False 옵션을 사용해서 효율적으로 찾아낼 수 있다.

다시 말해, 원하는 요소를 한번에 찾아내려 하면 해당 요소의 위쪽에 있는 모든 요소를 순회하게 되므로 계층 구조에 맞게 자식 요소만을 순차적으로 탐색해 나가는 것이 효율적이다.

profile
안녕하세요

0개의 댓글