2016-05-13 3 views
0

Ich kratze eine Liste von Restaurants von einer Website (mit Erlaubnis) und ich habe ein Problem. Die HTML-Python-Scrabes von der Website unterscheiden sich von den HTML-Code im Quellcode. Weniger als die Hälfte der Restaurants auf ihrer Website sind in Python im HTML gefunden. Dies ist, was mein Code wie folgt aussieht:Wie kann ein gescrapter HTML-Code vom Quellcode abweichen?

import requests 
from bs4 import BeautifulSoup 
from tempfile import TemporaryFile 
import xlwt 

url = 'https://www.example.com' 

r = requests.get(url) 
data = BeautifulSoup(r.text) 
soup = data.find_all('span',{'class':'restaurant_name'}) 
print soup 

Jetzt weiß ich, es ist incovenient, aber ich kann die HTML nicht zeigen, da das Unternehmen mich nicht im Stich lässt. Ich frage mich nur, ob Sie im Allgemeinen wissen, wie das von Python heruntergeladene HTML von dem im Quellcode abweichen kann und was ich dagegen tun kann.

Vielen Dank im Voraus!

+1

Welche anderen Verfahren vergleichen Sie dies? Sehen Sie sich den DOM Inspector Ihres Browsers an? Dies zeigt den * aktuellen Status * der Site an, nicht die ursprüngliche Quelle. Wenn die Website Daten über AJAX lädt, können diese beiden Dinge erheblich abweichen. – deceze

+1

Haben Sie in Betracht gezogen, dass Javascript verwendet werden kann, um Restaurants dynamisch hinzuzufügen? –

+0

Ja, ich schaue auf den Inspektor in meinem Browser! Ich wusste nicht, dass das einen Unterschied macht! Was kann ich tun, um den aktuellen Stand der Site herunterzuladen? – titusflex

Antwort

2

Sie können Selenium für diesen Zweck verwenden. Es rendert Ihre Webseite in der Laufzeit genau wie Ihr Browser. Sie können Selenium mit Firefox, Chrome oder Phantomjs verwenden.

Selen

Wir verwenden Selen grundsätzlich vollständig auf unserer Web-Seite zu machen, wie die meisten der Seiten aus Moderne JavaScript-Frameworks gemacht werden. Meistens wird es bei der Entwicklung von Crawlern/Scrappern zum Sammeln von Daten von verschiedenen Seiten einer Website verwendet oder Selenium wird auch in der Web-Automatisierung verwendet.

Mehr über Selenium, lesen Sie es hier http://selenium-python.readthedocs.io/ Auch ich habe Blog-Post auf Slenium für die Anfänger. Überprüfen Sie diese auch http://blog.hassanmehmood.com/creating-your-first-crawler-in-python/

Beispiel

import urllib 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

profile_link = 'http://hassanmehmood.com' 


class TitleScrapper(object): 

    def __init__(self): 

     fp = webdriver.FirefoxProfile() 
     fp.set_preference("browser.startup.homepage_override.mstone", "ignore") #Avoid startup screen 
     fp.set_preference("startup.homepage_welcome_url.additional", "about:blank") 

     self.driver = webdriver.Firefox(firefox_profile=fp) 
     self.driver.set_window_size(1120, 550) 

    def scrape_profile(self): 
     self.driver.get(profile_link) 
     print self.driver.title 
     self.driver.close() 

    def scrape(self): 
     self.scrape_profile() 


if __name__ == '__main__': 
    scraper = TitleScrapper() 
    scraper.scrape() 
3

In einem Wort, Javascript. Sie laden die grundlegende HTML-Seite herunter, aber Sie sind kein Browser, und Sie laden den JavaScript-Code, den der Browser ausführen würde, nicht herunter und führen ihn nicht aus. Und viele Websites beginnen heutzutage mit einer sehr kleinen HTML-Seite und verwenden Scripting, um zusätzliche Daten dynamisch vom Server zu laden und anzuzeigen.

+2

Wie würde ich den aktuellen Stand der Website herunterladen? – titusflex

+1

@titsflex Überprüfen Sie oben Antwort, Sie müssen Selen verwenden –

Verwandte Themen