2017-07-19 3 views
1

Ich habe ein Skript mit Scrapy und Splash, die verschiedene Daten von einer Website zieht, aber jetzt versuche, eine Möglichkeit zu finden, eine Offline-Kopie jeder Seite zu machen.Python Download eine vollständige Webseite (einschließlich CSS)

Ich habe folgende mit Scrapy versucht:

def parse(self, response): 
    filename = response.url.split("/")[-1] + '.html' 
    with open(filename, 'wb') as f: 
     f.write(response.body) 

Und das mit urllib:

def parse(self, response): 
    url = response.url 
    file_name = 'aaa.html' 
    with urllib.request.urlopen(url) as response, open(file_name, 'wb') as out_file: 
     shutil.copyfileobj(response, out_file) 

Beide, die gut funktionieren, aber nur die HTML-Download-Datei. Ich benötige die ganze Seite (mit CSS inklusive) - gibt es eine Möglichkeit, dies zu tun, ähnlich wie das Speichern als "Webseite, vollständig", wenn Websites manuell mit Google Chrome gespeichert werden?

Ich vermute, etwas wie Selen könnte, aber denke, es wäre zu langsam für meine Anwendung (die 100 erfordert, manchmal 1000 von URLs). Vielen Dank.

Antwort

0

Sie BeautifulSoup oder Scrapy gehen durch die heruntergeladene HTML und extrahieren Dinge mit dem a, src-Tags

insbesondere zum Beispiel die CSS in der folgenden Tag wird

<link rel="stylesheet" type="text/css" href=""> 

und dann verwenden können, Lade die Datei in den href-Inhalt herunter. Dein Code wird sehr viel komplexer sein müssen.

+0

Danke, ich versuche das und bin derzeit auf der Bearbeitung der Antwort fest, bevor ich es als HTML schreibe - ich bekomme den Fehler 'TypeError: ein Byte-ähnliches Objekt ist erforderlich, nicht 'str'', wenn Sie u singen Sie die Ersatzfunktion. Hast du bitte einen Ratschlag? Vielen Dank. –

Verwandte Themen