2013-08-07 11 views
5

Also ich bin ein CS-Student versucht, Web-Scraping und alle Do und Dont's, die damit einhergehen zu lernen. Nachdem ich mich mit iMacros und ein paar anderen Datenschürf-Tools beschäftigt hatte, wandte ich mich an Python, eine Sprache, mit der ich damals nicht vertraut war. Ich habe etwas über BeautifulSoup und Urllib2 gelernt und mir den Weg durch stackoverflow und ein paar andere Foren verschafft.Scraping Daten, kopflose Browser und Python

Jetzt, mit dem Wissen, das ich bisher gewonnen habe, kann ich die meisten statischen Webseiten schaben. Wir alle wissen jedoch, dass die Ära der statischen Seiten vorbei ist, da JS jetzt sogar auf mittelmäßigen Websites vorherrscht.

Ich möchte, dass jemand mich bitte in die richtige Richtung hier führt. Ich möchte eine Methode lernen, um Javascript geladene Webseiten zu laden, den gesamten Inhalt zu laden und diese Daten irgendwie in die BeautifulSoup-Funktion zu bekommen. Urllib2 ist nervtötend. Ich möchte auch die Fähigkeit, Formulare auszufüllen und durch Knopfklicks zu navigieren.

Meistens bestehen die Webseiten, an denen ich interessiert bin, aus einer langen Liste von Ergebnissen, die beim Herunterscrollen geladen werden. Laden sie alle und dann das Herunterladen der Seite scheint nicht zu helfen (nicht wissen, warum das ist). Ich verwende Windows 7 und habe Python 2.7.5 installiert.

Mir wurde gesagt, dass kopflose Browser wie Zombie oder Ghost mir helfen würden, aber ich weiß wirklich nicht viel über diese. Ich habe versucht, Bibliotheken wie Mechanize verwenden, aber sie nicht wirklich für das, was ich brauche, d. H, Laden der Ergebnisse, Holen der Webseite und Einspeisung in BS4.

In Anbetracht meiner minimalen Kenntnisse von Python, könnte mir hier jemand helfen?

Dank

+0

Das Javascript wird wahrscheinlich Ressourcen von einem externen JSON/XML/PHP Server abrufen. Verwenden Sie die Firebug- oder Chrome-Entwicklertools, um diese Quelle herauszufinden und dann von dort zu scraphen. –

+0

Ich denke, Sie haben Recht, aber ich hatte gehofft von mehr einer generischen Lösung für das Problem, mit kopflosen Browsern oder dergleichen –

+0

Ich weiß es nicht, sorry :( –

Antwort

9

Selenium Webdriver mit phantomjs kann ohne Kopf automatisierte Durchsuchen von JavaScript-driven Web-Seiten zu tun. Einmal installiert, kann es wie folgt verwendet werden:

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) 

auf Ubuntu, können sie mit

  • sudo pip install -U selenium
  • Download and unpack phantomjs
  • Link oder bewegen Sie den PhantomJS Binärdatei installiert werden ein Verzeichnis in Ihrem Pfad

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

Ich wurde zu der Überzeugung geführt, dass PhantomJS die Unterstützung für Python eingestellt hatte: http://phantomjs.org/release-1.5 .html –

+0

@HamzaTahir, phantomjs selbst hat die Python-Bindungen eingestellt, aber ein Projekt namens Ghostdriver https://github.com/detro/ghostdriver existiert, das Selenium einen Webtreiber für die Verwendung von PhantomJS als Browser zur Verfügung stellt. Sie können dann die Python-Bindungen verwenden um Selenium zu kontrollieren, das den Webtreiber steuert, der PhantomJS steuert. Ghostdriver wurde seither stromaufwärts in Selenium zusammengeführt. – dilbert

+0

@dilbert, also muss ich nur easy_install oder pip verwenden, um Selenium zu erhalten, den PhantomJS Browser herunterladen, und der obige Code wird funktionieren? –