티스토리 뷰
● 크롤링 결과를 가지고 연습해보자.
새로운 폴더를 만들어 시작하자.
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)
'코딩 > 스파르타코딩-웹개발' 카테고리의 다른 글
웹개발 4주차 개발일지(2) - 프로젝트 [화성땅 공동구매] (0) | 2022.10.25 |
---|---|
웹개발 4주차 개발일지(1) - flask (0) | 2022.10.24 |
웹개발 3주차 개발일지(3) - 데이터베이스 (0) | 2022.10.20 |
웹개발 3주차 개발일지(2) - 파이썬 패키지 사용하기, 크롤링 (0) | 2022.10.18 |
웹개발 3주차 개발일지(1) - 파이썬 기초 문법 (0) | 2022.10.17 |