2016-07-03 2 views
-2

Dies ist nur eine Beispielseite. Diese Seite sendet sehr wenig HTML und scheint die meisten Seiteninformationen so zu erstellen, dass sie vom Browser des Kunden zusammengestellt werden.Wie kratzt man so eine Seite?

https://www.resto-in.fr/plandusite

Scrapy ist offenbar nicht in der Lage, etwas zu sehen, wie der Browser tut. Ich frage mich, wie ich scrapy bekommen kann, um zu sehen, was der Browser sieht.

Vielen Dank für Ihre Zeit und Ratschläge.

+0

Warum der Downvote? – DrewSSP

+0

Sie werden downvoted, denn bevor Sie fragen, sollten Sie etwas versuchen und dann kommen und fragen, was nicht funktioniert. Providing Code ist ein wichtiger Teil einer Frage –

Antwort

0

Das Problem, das Sie hier begegnen, heißt AJAX. Was im Grunde bedeutet, dass JavaScript einige Sachen hinter den Kulissen herunterlädt. Scrapy-Spider führen kein Javascript aus, daher müssen Sie diese Anrufe selbst zurückentwickeln.

, das zu tun:
Wenn Sie die network Registerkarte in Ihrem bevorzugten Browser Inspektor öffnen (zB Firebug)
Sie werden bemerken, dass, wenn Sie die Webseite laden die Javascript hinter den Kulissen einige Seiten zu öffnen und das Herunterladen ein paar Sachen. In diesem Fall wird diese Seite heruntergeladen ganze Sitemap aus: https://api.resto-in.com/api/v2/sitemap/1.json

können Sie das hier sehen: inspector

Also diese Anforderung gibt json Inhalt mit so ziemlich alle Daten, die Sie suchen.

Mehr faulen Alternative wäre - um einen Browser-Simulator wie splash zu haben, um Javascript abzurufen und auszuführen, um die Seite zu laden und dann den Quellcode an scrapy zum Crawlen zu übergeben.

+0

Das ist genau das, was ich vermisst habe. Vielen Dank. – DrewSSP

+0

@DrewSSP Ihre Begrüßung, ich habe auch die Antwort bearbeitet, um ein paar Informationen über alternative Ansatz mit 'Splash' zu enthalten, um das Javascript für scrapy zu crawlen. – Granitosaurus

-1

Haben Sie etwas wie Selenium oder PhantomJS versucht? Dadurch können Sie einen Webbrowser auf programmierbare Weise ausführen, und dann laufen die Javascript-/Client-Teile genauso wie beim manuellen Durchsuchen. Wenn Sie beispielsweise nur HTML und Javascript in den Python-Speicher ziehen, kann Python dieses Javascript nicht wie Ihr Browser ausführen, und abhängig von der Site können 99% der Interaktion in diesem Javascript stattfinden.

Wenn Sie in "Entwicklerwerkzeuge" auf die Registerkarte "Netzwerk" gehen oder Firebug einen Hinweis darauf geben, welche Anforderungen gestellt werden, ist dies möglicherweise nicht immer die beste Lösung. Zum Beispiel feuern einige Websites Dutzende kleiner AJAX-Anfragen ab, um eine geringfügige Interaktion auf ihrer Website zu ermöglichen (da sie Logging, Analysen, Werbung, Echtzeitbenachrichtigungen usw. durchführen) und die Anfrage-URLs (manchmal absichtlich) sein können. kryptisch oder kompliziert. Sie können möglicherweise nicht herausfinden, was jede URL und Parameter tatsächlich tut, aber Sie können erkennen, dass das Scrollen ein wenig nach unten und klicken Sie auf "Weiter" Pfeil erhält die Bilder, die Sie auf dem Bildschirm angezeigt werden sollen.

Einige Websites versuchen auch, das Scrappen von Nicht-Browsern zu verhindern (um zu versuchen, das eklatante Ernten ihrer Daten zu beschränken und die Nutzung für den Menschen zu erhöhen). Sie werden kleine "Beacons" in den clientseitigen Code einbetten, und wenn diese Beacons nicht mit Ihren anderen Anfragen verknüpft sind, blockieren sie Ihre IP. Es sollte fast immer Wege geben um diese Dinge, aber es macht es schwieriger.

Andere Dinge wie Cookies oder HTML-5-Speicher sind ein weiteres Problem.

Verwandte Themen