2013-08-07 3 views
5

저는 CS 학생이 웹 스크래핑을 배우려고 노력하고 있습니다. iMacros와 '도구'를 긁어 모으는 다른 데이터를 망쳐 놓은 후, 나는 그 당시 익숙하지 않은 언어 인 파이썬으로 향했다. BeautifulSoup과 urllib2에 대해 배웠고 stackoverflow와 몇 개의 다른 포럼을 통해 학습하면서 자신의 길을 망쳐 놓았습니다.데이터, 헤드리스 브라우저 및 Python을 긁어 모으기 중

지금까지 얻은 지식을 사용하여 대부분의 정적 웹 페이지를 긁을 수 있습니다. 그러나 정적 페이지의 시대는 이제 끝났습니다. JS가 평범한 웹 사이트에서도 최고의 자리를 차지하기 때문입니다.

누군가가 나를 올바른 방향으로 인도 해 주시기 바랍니다. Javascript가 많은 웹 페이지를로드하고 모든 내용을로드 한 다음이 데이터를 BeautifulSoup 함수로 가져 오는 방법을 배우고 싶습니다. Urllib2는 그것에 짜증납니다. 또한 양식을 채우고 버튼 클릭을 통해 탐색 할 수있는 기능을 원합니다.

대부분 관심있는 웹 사이트는 아래로 스크롤 할 때로드되는 결과의 긴 목록으로 구성됩니다. 그 (것)들을 모두 적재하고 그 후에 페이지를 다운로드하는 것은 돕지 않는 것입니다 (왜인지는 알지 못합니다). 저는 Windows 7을 사용하고 Python 2.7.5를 설치했습니다.

좀비 나 고스트와 같은 헤드리스 브라우저가 도움이 될 것이라고 들었지만 실제로는 그다지 잘 모릅니다. 나는 기계화와 같은 라이브러리를 사용해 보았지만 결과물을로드하고, 웹 페이지를 가져오고, BS4에 공급하기 때문에 필요한 항목을 실제로 처리하지 못했습니다.

파이썬에 대한 최소한의 지식을 염두에두면 누구나 나를 도와 줄 수 있습니까?

감사 phantomjs

+0

자바 스크립트는 외부 JSON/XML/PHP 서버에서 리소스를 가져 오는 것일 수 있습니다. Firebug 또는 Chrome 개발자 도구를 사용하여 해당 소스를 찾은 다음 거기에서 긁어 내십시오. –

+0

나는 당신이 맞다고 생각하지만 헤드리스 브라우저 또는 일부를 사용하여 문제에 대한 일반적인 해결책을 더 기대하고있다. –

+0

미안하다. ( –

답변

9

Selenium Webdriver 자바 스크립트 기반의 웹 페이지의 헤드리스 자동으로 검색 할 수 있습니다.

import contextlib 
import selenium.webdriver as webdriver 
import bs4 as bs 

# define path to the phantomjs binary 
phantomjs = 'phantomjs' 
url = ... 
with contextlib.closing(webdriver.PhantomJS(phantomjs)) as driver: 
    driver.get(url) 
    content = driver.page_source 
    soup = bs.BeautifulSoup(content) 

우분투, 그들은

  • sudo pip install -U selenium
  • Download and unpack phantomjs
  • 링크와 함께 설치 될 수 있습니다 또는 phantomjs 바이너리를 이동 : 설치 후에는 다음과 같이 사용할 수 있습니다 PATH에있는 디렉토리

    % cd phantomjs-1.9.0-linux-i686/bin/ 
    % ln phantomjs ~/bin 
    
+1

PhantomJS가 파이썬에 대한 지원을 중단했다는 결론을 얻었습니다. http://phantomjs.org/release-1.5 .html –

+0

@HamzaTahir, phantomjs 자체가 Python 바인딩을 중단했지만 PhantomJS를 브라우저로 사용하기 위해 Selenium에 웹 드라이버를 제공하는 Ghostdriver https://github.com/detro/ghostdriver라는 프로젝트가 있습니다. 그런 다음 Python 바인딩을 사용할 수 있습니다 PhantomJS를 제어하는 ​​웹 드라이버를 제어하는 ​​Selenium을 제어합니다 .Ghostdriver는 이후 Selenium으로 병합되었습니다. – dilbert

+0

@dilbert 그래서 easy_install 또는 pip를 사용하여 Selenium을 얻고 PhantomJS 브라우저를 다운로드하면 위의 코드가 작동할까요? –

관련 문제