Was sind die besten Optionen für das Web-Scraping eines derzeit nicht geöffneten Tabs in einer Google Chrome-Erweiterung mit JavaScript und den verfügbaren Technologien ? Andere JavaScript-Bibliotheken werden ebenfalls akzeptiert.
Das Wichtigste ist, das Scraping so zu maskieren, dass es sich wie eine normale Webanforderung verhält . Keine Hinweise auf AJAX oder XMLHttpRequest, wie X-Requested-With: XMLHttpRequest
oder Origin
.
Der abgekratzte Inhalt muss über JavaScript zugänglich sein, damit er innerhalb der Erweiterung weiter bearbeitet und dargestellt werden kann, höchstwahrscheinlich als Zeichenfolge.
Gibt es Hooks in einer WebKit / Chrome-spezifischen API: s, mit denen eine normale Webanforderung gestellt und die Ergebnisse für die Manipulation abgerufen werden können?
var pageContent = getPageContent(url); // TODO: Implement
var items = $(pageContent).find('.item');
// Display items with further selections
Bonuspunkte, damit dies aus einer lokalen Datei auf der Festplatte für das erste Debugging funktioniert . Aber wenn dies der einzige Punkt ist, der eine Lösung stoppt, ignorieren Sie die Bonuspunkte.
Antworten:
Versuchen Sie , verwenden XHR2
responseType = "document"
und fallen zurück auf(new DOMParser).parseFromString(responseText, getResponseHeader("Content-Type"))
mit meinemtext/html
Patch . Unter https://gist.github.com/1138724 finden Sie ein Beispiel dafür, wie ichresponseType = "document
Unterstützung erkenne (synchrones Überprüfenresponse === null
einer aus einemtext/html
Blob erstellten Objekt-URL ).Verwenden Sie die Chrome WebRequest-API , um
X-Requested-With
Header usw. auszublenden .quelle
Wenn Sie sich etwas anderes als ein Google Chrome-Plugin ansehen möchten , schauen Sie sich Phantomjs an , das Qt-Webkit im Hintergrund verwendet und wie ein Browser ausgeführt wird, der Ajax-Anfragen stellt. Sie können es als kopflosen Browser bezeichnen, da es die Ausgabe nicht auf einem Bildschirm anzeigt und ruhig im Hintergrund arbeiten kann, während Sie andere Dinge tun. Wenn Sie möchten, können Sie Bilder und PDF-Dateien aus den abgerufenen Seiten exportieren. Es bietet eine JS-Oberfläche zum Laden von Seiten, Klicken auf Schaltflächen usw., ähnlich wie in einem Browser. Sie können auch benutzerdefiniertes JS, z. B. jQuery, in jede der Seiten einfügen, die Sie kratzen möchten, und damit auf den Dom zugreifen und die gewünschten Daten exportieren. Bei der Verwendung von Webkit entspricht das Renderverhalten genau dem von Google Chrome.
Eine andere Möglichkeit wäre die Verwendung von Aptana Jaxer, das auf Mozilla Engine basiert und an sich ein sehr gutes Konzept darstellt. Es kann auch als einfaches Schabewerkzeug verwendet werden.
quelle
Seit diese Frage gestellt wurde, wurden viele Tools veröffentlicht.
artoo.js ist einer von ihnen. Es handelt sich um einen Teil des JavaScript-Codes, der in der Konsole Ihres Browsers ausgeführt werden soll, um Ihnen einige Scraping-Dienstprogramme bereitzustellen. Es kann auch als Chromverlängerung verwendet werden.
quelle
Web Scraping ist in einer Chrome-Erweiterung ziemlich kompliziert. Ein paar Punkte:
quelle
Ich bin mir nicht sicher, ob dies nur mit JavaScript möglich ist. Wenn Sie jedoch ein dediziertes PHP-Skript für Ihre Erweiterung einrichten können, das cURL zum Abrufen des HTML-Codes für eine Seite verwendet, kann das PHP-Skript die Seite für Sie kratzen und Ihre Erweiterung lesen es in durch eine AJAX-Anfrage.
Die tatsächlich gekratzte Seite würde jedoch nicht wissen, dass es sich um eine AJAX-Anforderung handelt, da auf sie über cURL zugegriffen wird.
quelle
Ich denke, Sie können von diesem Beispiel ausgehen .
Grundsätzlich können Sie also versuchen, die Kombination aus Erweiterung und Plugin zu verwenden. Die Erweiterung hätte Zugriff auf DOM (einschließlich Plugin) und würde den Prozess steuern. Und das Plugin würde tatsächliche HTTP-Anfragen senden.
Ich kann die Verwendung von Firebreath als plattformübergreifende Chrome / Firefox-Plugin-Plattform empfehlen. Sehen Sie sich insbesondere dieses Beispiel an: Firebreath - Erstellen von + HTTP + -Anfragen + mit + SimpleStreamsHelper
quelle
Könntest du nicht einfach ein paar Iframe-Tricks machen? Wenn Sie die URL in einen dedizierten Frame laden, haben Sie den Dom in einem Dokumentobjekt und können Ihre JQuery-Auswahl treffen, nicht wahr?
quelle