인프런 커뮤니티 질문&답변
html 변경됌
작성
·
194
답변 1
0
남박사
지식공유자
네 감사합니다. 강의 하단에 수정된 코드를 첨부해놨습니다. 크롤링 프로그램을 만드는 사람들은 항상 웹사이트들이 페이지를 업데이트하고 리뉴얼을 자주 할 수 있다는 전제를 갖고 프로그램을 만들어야 합니다. 그래서 실제 실무에서도 페이지 크롤링이 실패하면 슬랙이나 텔레그램 같은 외부 메신저 프로그램을 통해 알림을 받게끔 코드를 짜기도 합니다.
아래는 수정된 코드의 내용입니다.
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))





