티스토리 뷰

● 크롤링 결과를 가지고 연습해보자.

새로운 폴더를 만들어 시작하자.

 

 

 

1) 영화 '가버나움'의 평점을 가져오자.

특정 결과값을 가져오려면?

.find_one()

먼저 해당 데이터를 가져와보자.

movie = db.movies.find_one({'title': '가버나움'})
print(movie)

여기서 평점만 가져온다.

print(movie['star'])

 


 

2) '가버나움'의 평점과 같은 평점의 영화 제목들을 가져오자.

'가버나움'의 평점을 이용하여 같은 평점인 영화들을 가져온다.

movie = db.movies.find_one({'title':'가버나움'})
star = movie['star']

'가버나움'의 평점을 선언해준 후 조건을 걸어준다.

all_movies = list(db.moviess.find({'star':star},{'_id':False}))

안의 리스트를 모두 보기위해 하나씩 찍어주자.

for m in all_movies:
    print(m)

제목만 뽑아주면 완료.

    print(m['title'])

 

 


3) '가버나움'의 평점을 0으로 만들어보자.

수정하기는 .update_one()을 사용한다.

※ 데이터에 입력된 값은 '문자열'로 들어가있다.

db.movies.update_one({'title':'가버나움'},{'$set':{'star':'0'}})

 

 


● 지니 뮤직 크롤링하기

지니뮤직의 실시간 차트를 크롤링해보자.

기본 세팅부터 시작한다.

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://www.genie.co.kr/chart/top200',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

실시간 차트의url을 연결한다.

 

순위를 먼저 가져와보자.

검사창을 들어가보면 박스 하나가 tr로 묶여있다.

두 개의 copy selector를 가져와 비교한 후 공통된 부분을 가져오자.

trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')

출력시 리스트형태로 나오므로 하나씩 찍어준다.

이제 순위를 가져오자.

trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')
for tr in trs:
    rank = tr.select_one('td.number')
    print(rank.text)

필요없는 부분도 나오고, 텍스트 사이의 간격이 벌어져있다.

순위 번호만 나오도록 끊어주자.

.text[0:2] → 앞에서 두 번째 글자까지 끊는다.

    print(rank.text[0:2])

그런데 1의 자리 숫자는 여전히 사이 공백이 나타난다.

이럴땐 파이썬 내장 함수인 '.strip()'를 사용하자.

    print(rank.text[0:2].strip())

 

 

이제 제목을 가져오자.

    title = tr.select_one('td.info > a.title.ellipsis')
    print(title.text)

제목에서도 여백이 띄어져서 나온다.

여백을 없애주자.

    title = tr.select_one('td.info > a.title.ellipsis').text.strip()
    print(title)

 

 

 

마지막으로 가수명을 가져오자.

    artist = tr.select_one('td.info > a.artist.ellipsis')
    print(artist.text)

가수는 여백 없이 출력된다.

 

 

이제 순위, 제목, 가수를 가져와보자.

for tr in trs:
    rank = tr.select_one('td.number').text[0:2].strip()
    title = tr.select_one('td.info > a.title.ellipsis').text.strip()
    artist = tr.select_one('td.info > a.artist.ellipsis').text
    print(rank, title, artist)

728x90