2013-08-07 18 views
5

Więc jestem studentem CS próbującym nauczyć się skrobania w sieci i wszystkich rzeczy, które do niego pasują i tego nie robią. Po kłopotach z iMacros i kilkoma innymi "narzędziami" do skrobania danych zwróciłem się do Pythona, języka, którego wtedy nie znałem. Dowiedziałem się o BeautifulSoup i urllib2, i popełniłem błąd w nauce poprzez stackoverflow i kilka innych forów.Skrobanie danych, przeglądarki bez nagłówków i Python

Teraz, korzystając z wiedzy zdobytej do tej pory, mogę skasować większość statycznych stron internetowych. Jednak wszyscy wiemy, że era statycznych stron się skończyła, ponieważ JS teraz króluje nawet na przeciętnych stronach internetowych.

Chciałbym, aby ktoś mnie poprowadził we właściwym kierunku. Chcę się nauczyć metody ładowania stron internetowych z Javascriptem, ładowania całej zawartości, a następnie w jakiś sposób przekazania tych danych do funkcji BeautifulSoup. Urllib2 ssie to. Chciałbym również możliwość wypełniania formularzy i nawigowania za pomocą kliknięć przycisków.

Głównie strony internetowe, którymi są zainteresowane, składają się z długiej listy wyników, które są wczytywane podczas przewijania w dół. Ładowanie ich wszystkich, a następnie pobieranie strony nie wydaje się pomóc (Nie wiem, dlaczego tak jest). Używam systemu Windows 7 i zainstalowałem Python 2.7.5.

Powiedziano mi, że bezgłowe przeglądarki, takie jak zombie lub Ghost, mogłyby mi pomóc, ale naprawdę nie wiem zbyt wiele o nich. Próbowałem używać bibliotek, takich jak mechanize, ale one naprawdę nie zaspokajają tego, czego potrzebuję, tj. Ładowanie wyników, pobieranie strony internetowej i podawanie do BS4.

Biorąc pod uwagę moją minimalną wiedzę o Pythonie, czy ktoś mógłby mi pomóc?

Dzięki

+0

JavaScript prawdopodobnie będzie pobierał zasoby z zewnętrznego serwera JSON/XML/PHP. Użyj narzędzia Firebug lub Narzędzi dla programistów Chrome, aby znaleźć to źródło, a następnie zeskanuj go. –

+0

Zgaduję, że masz rację, ale miałem nadzieję na bardziej ogólne rozwiązanie tego problemu, używając bezgłowych przeglądarek lub niektórych takich –

+0

Nie wiem o tym, przepraszam :( –

Odpowiedz

9

Selenium Webdriver z phantomjs może zrobić bezgłowe zautomatyzowane przeglądanie JavaScript napędzanych stron. Raz zainstalowany, można go używać tak:

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) 

Na Ubuntu, mogą być instalowane z

  • sudo pip install -U selenium
  • Download and unpack phantomjs
  • łącza lub przenieść plik binarny phantomjs do katalog w twojej PATH

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

Uświadomiłem sobie, że PhantomJS przestał wspierać Pythona: http://phantomjs.org/release-1.5 .html –

+0

@HamzaTahir, phantomjs sam przerwał tworzenie powiązań Pythona, ale istnieje projekt o nazwie Ghostdriver https://github.com/detro/ghostdriver, który zapewnia webrownikowi do Selenium korzystanie z PhantomJS jako przeglądarki.Możesz następnie użyć powiązań Pythona kontrolować Selen, który kontroluje webdrivera, który kontroluje PhantomJS, Ghostdriver od tego czasu został włączony do Selenium. – dilbert

+0

@dilbert więc po prostu muszę użyć easy_install lub pip, aby pobrać Selenium, pobrać przeglądarkę PhantomJS, a powyższy kod zadziała? –