BeautifulSoup 으로 네이버 영화 평점 크롤링하기
310
작성한 질문수 2
import requests
from bs4 import BeautifulSoup
url = "https://movie.naver.com/movie/point/af/list.nhn?&page=1"
r = requests.get(url)
bs = BeautifulSoup(r.text, "lxml")
tables = bs.select("table.list_netizen > tbody > tr")
for tr in tables:
tds = tr.select("td")
if len(tds) != 5:
continue
point = int(tds[2].text)
movie = tds[3].select("a[href]")[0].text
writer = tds[4].select("a")[0].text
print(movie, point, writer)
예상 결과값
극한직업 10 youm**** 나의 특별한 형제 10 youm**** 뺑반 9 elfs**** 퓨리 10 rkdt**** 어벤져스: 엔드게임 9 cfdl**** 왓칭 1 grem**** 가버나움 10 good**** 나의 특별한 형제 10 sona**** 어벤져스: 엔드게임 10 kore**** 캡틴 마블 1 cgc0****
해당 코드로 run을하면, 예제 주신것과 같이 Print가 되어야하는데... print가 안되네요 혹시나해서 공유해주신 jupyter code도 실행해 봤지만, 동일한 문제가 발생합니다. jupyter,vscode 모두에서 이런 현상이 발생하는데, 혹시 제가 놓친 부분이 있을까요?
답변 3
1
강의를 보시면 영상 나오는 하단에 수정된 코드가 있습니다. 2020년 1월부로 사이트의 내용이 변경되어 수정된 부분입니다.
import requests
from bs4 import BeautifulSoup
def get_movie_point(start, end=1):
results = []
for i in range(start, end+1):
url = 'https://movie.naver.com/movie/point/af/list.nhn?&page={}'.format(i)
r = requests.get(url)
bs = BeautifulSoup(r.text, "lxml")
trs = bs.select("table.list_netizen > tbody > tr")
for tr in trs: #다수의 평점
# 번호
number = tr.select_one("td.ac.num").text
# 작성자
writer = tr.select_one("td.num > a.author").text
# td 의 title 클래스를 구합니다.
tr_data = tr.select_one("td.title")
# td class="title" 자식중 최초 a 태그안에 제목만 추출
title = tr_data.select_one("a").text
# td class="title" 자식중 div 태그 자식중 em 태그에 점수 추출
point = tr_data.select_one("div.list_netizen_score > em").text
# td class="title" 태그에서 a, div, br 태그 제거
# extract() 함수는 태그와 태그의 내용까지 모두 제거합니다.
[x.extract() for x in tr_data.select("a")]
[x.extract() for x in tr_data.select("div")]
[x.extract() for x in tr_data.select("br")]
# 위에서 태그를 모두 제거한 tr_data에서 내용만 추출
content = tr_data.text.strip()
results.append({
"number": number,
"movie": title,
"point": point,
"writer": writer,
"contents": content,
})
return results
print(get_movie_point(1,1))
0
답변 감사합니다,
혹시나해서 개발 도구를 확인해서 확인해보니 tds len가 5->3이 되어있고, point, movie, writer의 index값이 변경되있어서 수정하니 아래 코드와 결과처럼 해결했습니다.
url = "https://movie.naver.com/movie/point/af/list.nhn?&page=1"
r = requests.get(url)
bs = BeautifulSoup(r.text, "lxml")
tables = bs.select("table.list_netizen > tbody > tr")
for tr in tables:
tds = tr.select("td")
if len(tds) != 3:
continue
point = tds[1].select("div[class]")[0].text
movie = tds[1].select("a[href]")[0].text
writer = tds[2].select("a")[0].text
print(movie, point, writer)
코드 결과값
해피 해피 브레드 별점 - 총 10점 중10 star**** 가장 보통의 연애 별점 - 총 10점 중6 andy**** 애프터 별점 - 총 10점 중10 riri**** 건축학개론 별점 - 총 10점 중1 leee**** 어스 별점 - 총 10점 중4 1992**** 가장 따뜻한 색, 블루 별점 - 총 10점 중7 ijuh**** 애프터 별점 - 총 10점 중10 unge**** 아가씨 별점 - 총 10점 중7 ijuh**** 교회오빠 별점 - 총 10점 중10 ayj5**** 매드맥스: 분노의 도로 별점 - 총 10점 중10 club****
38강 = 연산자 더하고 빼기
0
60
2
주석처리
0
116
1
함수의 파라미터값 msg
0
155
1
강의자료 이미지 안나옴
0
239
3
강의자료 질문 두번째
0
165
3
강의자료 관련 질문
0
116
1
파이썬 예외 처리 try / except 파일 처리 코드가 실행이 안됩니다.
0
235
1
소수 너무 어려워요
0
245
1
imagefont 함수 사용
0
239
1
pylint
0
357
1
add 함수 문의 ㅠㅠ
0
283
1
형식 문의드립니다.
0
209
1
변수 명을 왜 src, tar로 하셨는지 궁금합니다.
0
602
1
숫자야구 코드를 짜 봤는데 뭔가 이상합니다.
0
253
1
zsh: command not found: pylint
0
269
1
텔레그램 봇 만들기 코드 실행이 안됩니다 박사님..ㅠ
0
546
1
질문드립니다.
1
374
2
list.reverse() 출력에 대해서 질문있습니다.
1
433
1
데코레이터 함수 및 동작시간 질문입니다.~
1
323
2
opencv 사용하면서 궁금한점 (해상도)
1
781
1
질문드립니다.
1
299
1
아래 오류가 뜨면서 vscode가 컴파일이 되지 않는데.. 혹시 왜이럴까요?
1
445
1
크롤링안되는 현상 문의 드립니다.
1
421
1
파이썬 크롤링 관련 문의
1
277
1





