파이썬 BeautifulSoup(bs4) 를 활용한 웹 크롤링에 대해 알아보겠습니다.
파이썬 크롤링 자체는 그다지 어려울것이 없습니다. 다만 크롤링을 위해 BeautifulSoup 의 설치가 선행되어야 한다는점이 조금 난이도가 있을수도 있을것 같습니다.
또한 최근 크롤링을 막는 사이트 들이 많아서 이를 우회하는 방법을 찾는게 좀더 어려울수 있습니다.
크롤링을 우회하는 모든 방법을 여기서 설명드릴수는 없고 가장 기본적인 방법을 설명드리고 이를 사용해보시면 어떤 방법으로 우회하는지 대략 감을 잡으실수 있을것 같습니다.
목차
1. 크롤링이란
2. BeautifulSoup 설치
3. request 를 활용한 크롤링 - 우회 기본방식
4. 데이터 파싱
5. 마치며
1. 크롤링이란
웹사이트를 찾아서 접근하고 태그단위로 나눈다음 필요한 데이터를 수집 저장하는 행위를 개념적으로 크롤링이라고 알고 있을겁니다. 하지만 이 일련의 행위들은 모두 다른 이름으로 정의되어 있습니다.
크롤링 : 웹사이트를 탐색하는 행위(인덱싱이라고 합니다.)
파싱 : 탐색된 사이트를 태그단위로 나눠서 문자로 분석하는 행위
스크래핑 : 분석된 데이터를 수집해서 데이터화하는 행위
사용자에 따라 각 용어에 대한 해석이 다를수는 있으나 대략 저런 의미로 정의되어 사용되고 있다고 알고 있으면될것 같습니다.
2. BeautifulSoup 설치
설치되어 있는 파이썬의 패키지 정보를 우선 확인합니다.
pip list
만약 위에서 확인한 패키지 리스트에 "BeautifulSoup, Requests" 두가지 패키지가 없다면 아래 과정을 따라서 설치해주시면됩니다.
웹사이트를 파싱하는데 사용하는 파이썬의 BeautifulSoup 패키지를 설치하도록 하겠습니다.
pip install beautifulsoup4
크롤링을 위해서 필요한 request 패키지도 있는지 확인해보시고 없으면
pip install requests
이렇게 설치해주시면됩니다.
3. request 를 활용한 크롤링 - 우회 기본방식
예제를 먼저 보겠습니다.
import requests
url = "http://www.naver.com"
session = requests.Session()
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}
html = session.get(url, headers=headers).content
위의 예제에서 설정된 header 는 사이트에 접근할때 내가 브라우저에서 접근했다는 정보를 설정해주는 부분입니다.
이게 설정되어 있지 않은 경우에 사이트는 접근자를 봇으로 인식할수도 있어서 접근 자체가 거부될수도 있으니 참고해서 적용 해주세요.
실제로 헤더에 설정없이 접근했다가 사이트를 읽는 행위 자체가 아예 안되는 경우도 많습니다.
4. 데이터 파싱
예제를 먼저 보겠습니다.
from bs4 import BeautifulSoup as bs
soup = bs(html, "html.parser")
items = soup.select("div[itemprop='itemListElement']")
사전에 설치했던 BeautifulSoup 를 활용해서 읽어온 html 문자열을 파싱하는 부분입니다.
"soup = bs(html, 'html.parser')" 를 통해서 soup 객체에 파싱 가능하도록 담고 이후에 select, select_one, find, find_all 같은 함수를 사용해서 필요한 데이터를 추출하면됩니다.
select, select_one, find, find_all 사용법은 구글 검색을 통해 좀더 자세히 확인 하실수 있습니다.
5. 마치며
파이썬 BeautifulSoup(bs4) 를 활용한 웹 크롤링에 대해서 알아보았습니다.
크롤링으로 파싱된 데이터는 DB 에 저장 할수도 있고 파일형태로 저장할수도 있습니다.
위에서도 설명했지만 사이트에 따라서 웹크롤링이나 스크래핑을 못하도록 막는 경우도 많으니까 참고부탁드립니다.
request 를 사용해서 불러온 데이터를 print 함수를 통해서 찍어보고 원하는 데이터가 다 읽혀졌는지 확인하면서 차근차근 진행하시면 쉽게 크롤링 하실수 있으실거에요
댓글