728x90
반응형
웹스크래핑(크롤링) 연습
선택형으로 원하는 데이터만 뽑아서 가져오기
순위, 이름, 평점 순으로 데이터를 스크래핑(크롤링)을 할건데
제일 먼저 해야할건?
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'}
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
# 코딩 시작
#old_content > table > tbody > tr:nth-child(3) > td.title > div > a
#old_content > table > tbody > tr:nth-child(4) > td.title > div > a
movies = soup.select('#old_content > table > tbody > tr')
for movie in movies:
a = movie.select_one('td.title > div > a')
if a is not None:
title = a.text
print(title)
이까지 잘 따라왔어야 한다.
이 이후부터가 중요하다.
그렇다 여기서 보이듯이 타이틀은
이미 a라는 변수로 가져왔다.
그렇다면 순위랑 별점은 어떻게 가져오나?
먼저 카피 셀렉트를 해본다.
#old_content > table > tbody > tr:nth-child(2) > td:nth-child(1) > img
이것은 순위의 카피셀렉트
먼저 순위부터 출력해보자
td:nth-child(1) > img
이부분이 순위에 대한 코드인것처럼 확인된다.
그럼
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'}
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
# 코딩 시작
#old_content > table > tbody > tr:nth-child(3) > td.title > div > a
#old_content > table > tbody > tr:nth-child(4) > td.title > div > a
movies = soup.select('#old_content > table > tbody > tr')
for movie in movies:
a = movie.select_one('td.title > div > a')
if a is not None:
title = a.text
rank = movie.select_one('td:nth-child(1) > img')
print(rank)
이렇게 랭크값을 준 뒤 출력해본다
alt 값이 순위인것을 확인할 수 있었다.
음 그러면
rank = movie.select_one('td:nth-child(1) > img')
이것의 alt 값만 가져오면 되겠네?
for movie in movies:
a = movie.select_one('td.title > div > a')
if a is not None:
title = a.text
rank = movie.select_one('td:nth-child(1) > img')['alt']
print(rank)
rank = movie.select_one('td:nth-child(1) > img')['alt']
출력해보자
빙고! 맞았다.
자 그럼 마지막으로 가져와야 할 데이터는 별점이다.
별점도 카피 셀렉트 해준다.
#old_content > table > tbody > tr:nth-child(2) > td.point
음 이건
td.point
이걸 가져와보면 될 것 같다.
for movie in movies:
a = movie.select_one('td.title > div > a')
if a is not None:
title = a.text
rank = movie.select_one('td:nth-child(1) > img')['alt']
star = movie.select_one('td.point')
print(star)
다른 데이터랑 헤깔릴 수 있으니 star 만 출력해보자
? 아까 타이틀이랑 비슷하네?
그럼 .text로 가져오면 되겠다.
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'}
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
# 코딩 시작
#old_content > table > tbody > tr:nth-child(3) > td.title > div > a
#old_content > table > tbody > tr:nth-child(4) > td.title > div > a
movies = soup.select('#old_content > table > tbody > tr')
for movie in movies:
a = movie.select_one('td.title > div > a')
if a is not None:
title = a.text
rank = movie.select_one('td:nth-child(1) > img')['alt']
star = movie.select_one('td.point').text
print(rank, title, star)
출력해주면
해당 결과값이 출력된다.
-끝-
728x90
반응형
'📁𝐩𝐫𝐨𝐠𝐫𝐚𝐦𝐦𝐢𝐧𝐠𝐋𝐚𝐧𝐠𝐮𝐚𝐠𝐞 > Python' 카테고리의 다른 글
[Flask] HTML 파일 주기 (0) | 2022.12.31 |
---|---|
[Flask] 서버 만들기 (4) | 2022.12.30 |
[웹 스크래핑 크롤링] 웹스크래핑(크롤링) 기초 (0) | 2022.12.29 |
[Python] 파이썬 패키지 사용해보기 (0) | 2022.12.28 |
[Python] 파이썬 기초공부 (2) | 2022.12.28 |