강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

오경서님의 프로필 이미지
오경서

작성한 질문수

남박사의 파이썬 기초부터 실전 100% 활용

[삭제예정] 네이버 영화 평점 크롤링 해서 액셀로 저장하기

html 변경됌

작성

·

194

1

네이버 영화 평점 사이트가 변경되었는 지 td가 3개네요

별점은 em태그안에 있네요 나중에 들으시는 분들 당황하지 마시고 html 잘 살펴보세요

               

답변 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))
오경서님의 프로필 이미지
오경서

작성한 질문수

질문하기