[Python] 네이버 영화 한줄평 크롤링 코드

Posted by 적분 ∫2tdt=t²+c
2017.03.17 01:03 프로그래밍

스팀 게임평이 양이 적어서 감성사전을 구축하기 어렵다고 판단하여 네이버 영화 평점을 수집하는 일을 수행했었는데요, 이 역시 수집만 하고 다음 단계로 넘어가지 않았기에 방치해두기 아까운 코드, 공유해드립니다.


앞의 글과 마찬가지로 Python3로 작성되었으며, 실행을 위해서 BeautifulSoup 라이브러리가 필요합니다.



실행하면 comments 폴더 안에 txt파일로 영화평들이 다운로드됩니다. comments 폴더를 미리 만들어두셔야 에러가 안 날거에요.

Tags
이 댓글을 비밀 댓글로
    • setinal
    • 2017.07.25 23:57 신고
    잘 이용하였습니다. 감사합니다. comments 폴더에 저장될 때 1 2 3 이렇게 저장되서 따로 해당 코드의 영화제목을 알아와서 전 제목별로 저장하니깐 한결 보기 편하더라구요 ㅎㅎ
    • 2018.05.10 23:05
    비밀댓글입니다
    • 먼저 수집할 영화들의 코드 번호를 확인하셔야합니다. 위의 파이썬 소스는 그냥 10000에서 200000까지로 잡았는데, 실제 해당 코드 번호는 존재하지 않는 번호입니다.

      네이버 영화 페이지에서 영화를 검색하여 들어가시면 https://movie.naver.com/movie/bi/mi/point.nhn?code=169347#tab 처럼 code 번호가 나옵니다. 원하는 코드 번호를 이용해 getComments(code)를 호출하시면 해당 영화의 평점이 수집됩니다.
    • 2018.06.26 17:11
    비밀댓글입니다
    • 네 outname이 'comments/~~~'로 되어있어서 comments 폴더를 만들라고했던겁니다. 경로를 바꾸고 싶으시면 저 값을 바꾸시면 되구요
  1. 코드 감사합니다. 덕분에 크롤링 처음으로 하는데 많은 도움이 되고 있습니다.
    지금 분석하면서 어떻게 진행되는지 보고 있는데, 51번째 라인의 &#(?![0-9]) 이게 negative lookahead로 &# 문자 뒷 부분에 숫자가 아닌 것들이 있으면 해당 글자집합(?)을 찾는 걸로 이해했습니다. 그런데 위의 코드의 48번째 라인의 data = f.read().decode('utf-8') 의 data를 print로 살펴보니깐 &#으로 시작하는 부분이 없어서 , 51번째 라인의 re.sub("&#(?![0-9])", "", data) 가 어떤 목적으로 사용하셨는지 궁금하여 질문 남깁니다. 좋은 코드 공유해주셔서 감사드립니다.
    • 죄송하지만 질문 한 개만 더 하려고 합니다.
      56번째 라인인 url = link.select('.score_reple em a')[0].get('onclick') 을 돌려보면,

      javascript:showPointListByNid(7715630, 'after');parent.clickcr(this, 'ara.uid', '', '', event); return false;

      와 같이 위의 7715630 이라는 숫자같은게 메모장에 함께 들어가던데 해당 숫자가 의미하는게 뭔지 잘 모르겠습니다. 제 개인 아이디로 접속해서 서로 다른 영화에 리뷰를 남겨봤습니다. 앞쪽영화에 리뷰를 남길 때 나오는 숫자보다, 뒷쪽 영화에 리뷰를 남길 때 나온 숫자가 1이 더 증가하던데, 정확하게 어떤 걸 의미하는지 잘 모르겠네요.ㅜㅜ
    • 첫번째 질문은 이해하신바가 맞습니다. 다만 해당 코드를 짠지가 오래돼서 &#부분을 왜 지워야했었는지는 기억이 안나네요. 아마 당시에 포스팅할때는 네이버 영화 html에 저런 데이터가 섞여있었어서 그걸 지우려고 그런듯 합니다.

      두번째 질문은 아마 숫자가 영화평의 고유넘버인것 같습니다. 그래서 이 값으로 중복제거를 실시했습니다.
  2. 말씀 감사드립니다. 코딩 좀 더 보면서 이해해야겠네요. 그리고 덕분에 다른 사이트도 연습삼아서 한 번 해볼 수 있을 것 같은 생각이 드네요. 월요일 잘 보내셨으면 좋겠습니다.
    (덧글에 다시 덧글을 어떻게 다는지 몰라서 댓글로 다시 남깁니다.)
  3. 안녕하세요. 질문이 하나 더 있는데, 소스를 run시켜보면 리뷰의 양이 작은건(1,000개 미만) 정도는 잘 되는데, 양이 10,000개 이상이면 가끔씩 프로그램이 리뷰를 전부 다 받아오지 않았는데 멈추는 경우가 생기더라구요. 그리고 한 번 더 돌려보면 앞에서 멈췄던 부분 이상으로 잘 받아오다가 다시 또 멈추는 현상이 발생해서 혹시 어떻게 된건지 알 수 있을까 하여 댓글 남깁니다. 감사합니다.
    • 짧은 시간 안에 네이버에 여러번 요청을 하면 네이버 쪽에서 차단을 시킬거에요 아마 그 이유 때문에 그러는것 같습니다. 반복하는 사이에 sleep을 넣어가며 천천히 수집하는게 좋습니다.
  4. 그렇군요. 프로그램 외적인 부분도 신경을 써야 하는군요. 덕분에 많이 알아가는 것 같습니다. 저도 누군가에게 나눠줄 수 있는 실력이 되면 좋겠네요. 좋은 하루되세요.^^