ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • facebook을 python으로 자유롭게 크롤링하기
    컴퓨럴/후로그람스 2016. 7. 2. 22:50

    추가(2018.03.09)
     이 코드는 오래되었습니다. facebook api 정책 변화와 버전 향상으로 더이상 전체 글을 받아오지 못합니다. 페이스북에 문의해보았으나(
    https://developers.facebook.com/bugs/414023489031447) 언제 고칠수 있을 지 장담하지 못한다고 합니다. facebook api 활용 면에서 코드를 참고 할수는 있지만 페이지 전체 글 크롤링 목적을 달성하지는 못할 것입니다.

    페이스북 자료를 일반 크롤러로 크롤링하는 것은 정말 힘든 일이다. 

    페이스북은 TISTORY처럼 게시판 형태의 사이트가 아니다. 페이스북이 자동으로 피드를 업데이트하기 때문에 시간별로 많은 자료를 크롤링하려고 한다면 완전완전 핵핵비추다.

     대안으로 페이스북 크롤링을 검색하면 바로 찾을 수 있는 것이 R에서 제공하는 Rfacebook 라이브러리이다. 하지만 Rfacebook 라이브러리는 기능이 매우 제한적이다. 페이지 본문, 본문의 좋아요 수 정도만 가져올 수 있고 댓글을 크롤링하거나 댓글의 좋아요 수, 시간, 공유한 사람 등을 파악할 수 없다.

     이런 여러가지 뻘짓을 시전한 후에 한줄의 빛줄기 같은 글을 발견했다. 아마 내 글을 볼수는 없겠지만 Max Woolf씨 너무 감사합니다.

    아래는 참고했던 링크와 상세한 설명이 있는 Github다. 코드설명은 이분한테 듣는게 훨씬 합리적이다. 

    추가(2017.04.12)

     영어권 페이지를 크롤링한다면 바로 이 코드를 사용하는것이 좋다. 페이스북에 새롭게 추가된 감정버튼(화나요 등등)도 파싱해준다. 하지만 Since, Until구문이 없어 오래된 페이지라면 엄청난 시간이 든다는 단점이 있다.


     전체 설명 : 

    http://minimaxir.com/2015/07/facebook-scraper/

     깃허브 :

    https://github.com/minimaxir/facebook-page-post-scraper/blob/master/examples/how_to_build_facebook_scraper.ipynb


    아래는 본문글, 만든 날짜, 좋아요수, 댓글을 크롤링해서 csv파일로 변환하는 코드다.  

     수정(2017.04.12)- python3 버전 업데이트

     만들다 보면 인코딩 문제가 나는 경우가 자주 있다. 이 코드들은 윈도우 OS로 사용할 때에 발생하는 인코딩문제를 반영한 코드들이다. 만약 Mac OS를 사용하는 사람이라면 코드에서 'cp949'라는 문자를 'utf8'로 바꾸는 것이 좋다.

     pythonColor scripter로 코드를 올리니 수정하는데 번거로움이 커서 github로 옮겼다(Star도 해주면 고맙습니다:])


    Link : Python2 page scraper 코드 링크

    Link : Python3 page scraper 코드 링크

    추가(2017.11.30)

     이 코드는 다른 감정 기능이 추가되기 전에 만들었다. 파일을 cp949화 하고 사용하기에는 편하지만, 감정기능을 사용할수 없다는 단점이 있다. 떄문에 만약 좋아요 수를 정확하게 알고 싶은 목적이라면Max Woolf 씨의 원래 코드(글 상단에 있음)를 사용하기를 바란다. 숫자는 영어가 아니니 상관없다.

    바꿔야 할 코드는 앞쪽 1~10줄 사이의 app_id, app_secret, page_id, since, until 정도다.

    1. app id와 app secret 은

    https://developers.facebook.com/tools/explorer 에서 가입 후 얻을 수 있다.

    +추가

     자세한 방법은

    http://zetawiki.com/wiki/%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%B6%81_%EC%95%B1_ID_%EB%B0%9C%EA%B8%89

    에서 참고하길 바란다

    2. page id는 만약에 이름이 허핑턴 포스트라도 413238928809895같은 고유 번호를 가지게 된다.

     자신이 크롤링 하고 싶은 사람, 페이지 등을 페이스북에서 들어가 그 링크를 http://findmyfbid.com/에 들어가서 붙이면 page id를 얻을 수 있다.

     since에는 내가 크롤링하고 싶은 기간 중 시작 시간을, until에는 내가 크롤링하고 싶은 기간 중 종료 시간을 입력하면 된다.

    + 추가

     시작 날짜 형식은 2015-01-31 이런 형식으로 작성해주어야 한다. 이 부분은 facebook에 주소를 요청하는 부분이기 때문에 잘못 적으면 404오류가 난다.


    3. 실행하기만 하면 잠시 후에 파이썬 기본 폴더(python 2.7/)안에 data 2015-01-31 2015-02-02 같은 이름의 파일이 저장된다. 

    밑의 그림처럼 작성날짜, 좋아요 수, 작성 글이 저장되어있다. 글쓴이는 크롤링할 때에 본글과 댓글의 구분이 그렇게 중요하지 않아 ':]' 기호로 글을 구분했다.


    유용하길 쓰이길 바랍니다!

    #수정 사항 : import facebook 삭제 

    예전에 라이브러리를 사용하다가 남았던 라이브러리들을 남겼는데 import오류가 난거 같네요.


Designed by Tistory.