작성
·
246
1
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
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****