DevSSOM

파이썬 크롤링 - 간단한 실습 : 영화 리뷰 수집 본문

Python/크롤링

파이썬 크롤링 - 간단한 실습 : 영화 리뷰 수집

데브쏨 2021. 6. 24. 01:05
반응형

영화 리뷰 수집하기

영화 사이트에 있는 영화평의 제목을 수집해서 출력해보기.

사용 URL 주소 : https://movie.naver.com/movie/bi/mi/review.nhn?code=168058#

 

퍼스트맨

이제껏 누구도 경험하지 못한 세계에 도전한 우주비행사 닐(라이언 고슬링)은, 거대한 위험 속에서 극한...

movie.naver.com

수집할 리뷰

출력 예시

후기 제목 1 
후기 제목 2

HTML 문서에서 원하는 태그를 정확히 추출하기 위해, find 함수를 여러 번 중첩하여 사용할 수 있음. 아래처럼 find로 찾은 결과에서 다시 find 함수로 찾는 방식.

# 예시
soup.find("ul").find("li").find("div").find("span")

 

import requests
from bs4 import BeautifulSoup

def crawling(soup) :
    # soup 객체에서 추출해야 하는 정보를 찾고 반환
    return None
    


def main() :
    custom_header = {
        'referer' : 'https://movie.naver.com/',
        'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
    }
    url = "https://movie.naver.com/movie/bi/mi/review.nhn?code=168058#"
    req = requests.get(url, headers = custom_header)
    soup = BeautifulSoup(req.text, "html.parser")

    # crawling 함수의 결과를 출력
    print(crawling(soup))


if __name__ == "__main__" :
    main()

 

 

>>>

구글 개발자 도구에서 리뷰의 제목들을 클릭해서 HTML 확인. 리뷰의 제목이 어느 태그에 속하고 있는지 확인. 제목은 <strong> 태그 사이에 있고, 이 <strong>태그를 <a>태그와 <li> 태그가 담고 있고, 각각의 영화평들 <li> 태그들은 <ul> 태그에 속해있어. 이 <ul> 태그에 접근해서 <li> 태그 -> <strong> 태그 순으로 접근.

 

def crawling(soup) :
    # soup 객체에서 추출해야 하는 정보를 찾고 반환

	ul = soup.find("ul", class_="rvw_list_area")
    
    for li in ul.find_all("li"):
        print(li.find("strong").get_text())
   
   	return None

 

 

이제 result라는 리스트를 만든 다음에 값들을 넣어줘.

def crawling(soup) :
    # soup 객체에서 추출해야 하는 정보를 찾고 반환
    ul = soup.find("ul", class_="rvw_list_area")
    
    result = []
    
    for li in ul.find_all("li"):
        result.append(li.find("strong").get_text())
    
    return result

 

최종 코드

import requests
from bs4 import BeautifulSoup

def crawling(soup) :
    # soup 객체에서 추출해야 하는 정보를 찾고 반환
    ul = soup.find("ul", class_="rvw_list_area")
    
    result = []
    
    for li in ul.find_all("li"):
        result.append(li.find("strong").get_text())
    
    return result
    
def main() :
    custom_header = {
        'referer' : 'https://movie.naver.com/',
        'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
    }
    url = "https://movie.naver.com/movie/bi/mi/review.nhn?code=168058#"
    req = requests.get(url, headers = custom_header)
    soup = BeautifulSoup(req.text, "html.parser")

    # crawling 함수의 결과를 출력
    print(crawling(soup))


if __name__ == "__main__" :
    main()

 

728x90
반응형
댓글