[Python] 웹스크래핑(크롤링)
1. 웹 크롤링 시 필요한 라이브러리
크롤링을 위해서는 requests와 BeautifulSoup 라이브러리가 필요하다. 라이브러리 다운로드 명령어는 다음과 같다.
pip install bs4
pip install requests
BeautifulSoup은 웹 페이지의 정보를 쉽게 가져올 수 있는 기능을 제공하고, requests는 http 요청을 보낼 수 있는 기능을 제공한다.
2. 크롤링 기초
- 2-1. 아래의 영화 페이지에서 랭킹, 영화 제목, 별점을 추출해보도록 하자.
- 2-2. 영화 제목에서 우클 -> 검사를 클릭하면 개발자 도구가 뜬다. 복사 -> selector 복사 시 조금 더 쉽게 원하는 html을 추출해 올 수 있다.
- 2-3. 복사해온 selector를 print 했을 때 아래와 같은 결과가 나온다.
- 2-4. 우리가 원하는 건 하나의 결과가 아니라 여러 개의 리스트라서 tr 전체를 select 해온다. html을 잘 파싱해오는 것을 확인할 수 있다.
- 2-5. 그 이후 for문으로 원하는 정보 추출
전체 코드
# 1. 필요한 라이브러리 import
import requests
from bs4 import BeautifulSoup
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
# 2. 아래 주소로 get 요청을 보낸다
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20230202', headers=headers)
# 3. 응답받은 데이터를 BeautifulSoup 객체 형태로 생성 및 반환한다
soup = BeautifulSoup(data.text, 'html.parser')
# 웹페이지 접속 -> 개발자 도구 -> 특정 html 선택 -> 복사 -> selector 복사
a = soup.select_one('#old_content > table > tbody > tr:nth-child(3) > td.title > div > a')
# print(a.text)
# print(a['href'])
trs = soup.select('#old_content > table > tbody > tr')
# print(trs)
for tr in trs :
a = tr.select_one('td.title > div > a')
if a is not None : # if title != None과 같다
title = a.text
rank = tr.select_one('td:nth-child(1) > img')['alt'] # html의 속성을 가지고 올 때는 []를 쓴다
point = tr.select_one('td.point').text
print(rank, title, point);