Wii Pointer #1 Tilt Normal
본문 바로가기
📁𝐩𝐫𝐨𝐠𝐫𝐚𝐦𝐦𝐢𝐧𝐠𝐋𝐚𝐧𝐠𝐮𝐚𝐠𝐞/Python

[웹 스크래핑 크롤링] 웹스크래핑(크롤링) 연습

by 개발자_후니 2022. 12. 29.
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
반응형