2016-07-23 24 views
-3

Gibt es eine Bibliothek, die synchrone JavaScript-Funktionen wie die folgende unterstützt?JavaScript-Funktion zum synchronen Scrappen von HTML und JS

Ich mag das Konzept hinter Pjscrape, aber ich möchte kein Befehlszeilenskript verwenden. Es macht mir nichts aus, PHP zu verwenden, aber ich möchte, dass meine Funktion synchron ist.

+1

ja. Es heißt Ajax. – dandavis

+1

Soll das in einem Browser laufen? Oder auf einem node.js Server? FYI, synchrone Vernetzung in Javascript wird entweder überhaupt nicht unterstützt (hängt von der Umgebung ab) oder eine wirklich schlechte Idee. – jfriend00

+0

@ jfriend00 Nun, ich bin auf der Suche nach einem Äquivalent zu jQuery $ .get für PHP Scraping. Ich möchte nur das Ergebnis in meiner Funktion zurückgegeben werden. – Wagtail

Antwort

1

Es gibt keine Javascript-Umgebung, in der synchrone Netzwerke zum Abrufen von Daten von einem externen Server empfohlen werden. So wird JavaScript nicht entworfen. JavaScript verwendet asynchrone E/A, bei denen das Ergebnis über ein Versprechen oder einen Rückruf zurückgegeben wird und nicht direkt von Ihrem Funktionsaufruf zurückgegeben werden kann.

Das "A" in "Ajax" steht für asynchron. Das ist ein Eckpfeiler, um vernetzte Anfragen von Javascript im Browser zu machen. Der Browser kann technisch einen synchronen Ajax-Aufruf ausführen, aber das wird aus verschiedenen Gründen nicht empfohlen (so wie er die Benutzeroberfläche während des Aufrufs im Browser anhängt) und wird auch in vielen Fällen als veraltet angesehen, da es fast nie eine gute Idee ist verwende synchrone Ajax. Außerdem sind Ajax-Aufrufe vom Browser entweder auf den gleichen Ursprung beschränkt, von dem Ihre Webseite kam, oder auf Server, die Cross-Ursprungs-Anfragen explizit zulassen. Sie können also nicht erwarten, dass ein Ajax-Aufruf eine beliebige Seite im Internet abruft. Sie können die meisten anderen Seiten nicht über einen AJAX-Aufruf der Browser-Webseite abrufen.

Was der Browser gut ist, ist asynchrone Vernetzung, wo das Ergebnis asynchron über einen Rückruf oder ein Versprechen irgendwann in der Zukunft zurückgegeben wird und der Rest Ihres Javascript weiterhin bis dahin ausgeführt wird. So sollten Sie Ihren Zugriff auf Netzwerkanforderungen codieren.

Wenn Sie Scrapped Ergebnisse in einem Browser von einer externen Website erhalten möchten, wäre die bevorzugte Architektur für das Einrichten eines Servers, der die Arbeit für Sie erledigen wird. Ihr Javascript in Ihrer Webseite wird einen Ajax-Anruf zu Ihrem eigenen Server machen und ihn auffordern, eine bestimmte Website zu scrappen. Der Server (der keine Kreuzherkunftsbeschränkungen hat, auf welchen Hosts er Anfragen stellen kann) wird dann den Inhalt abrufen, ihn in die gewünschten Ergebnisse abkratzen und dann die resultierenden Daten an Ihren Ajax-Aufruf zurückgeben.


So könnten Sie ein Versprechen in der Client-Design-basierte Schnittstelle, die asynchron wie dies funktionieren könnte:

getPageJS(someUrl).then(function(data) { 
    // process data here 
}).catch(function(err) { 
    // process error here 
});