Frage

Gibt es eine Möglichkeit, die Datenmenge ROTATION der Begrenzung wird holen? Ich bin Screen Scraping Daten von einer Seite, die 50kb ist, aber die Daten, die ich benötigen, ist in den oberen 1/4 der Seite, damit ich wirklich nur die erste 10kb der Seite abgerufen werden muß.

Ich frage, weil es eine Menge von Daten, die ich überwachen müssen, die in mir Ergebnisse der Nähe von 60 GB Daten pro Monat übertragen, wenn nur etwa 5 GB dieser Bandbreite relevant ist.

Ich bin mit PHP den Daten zu verarbeiten, aber flexibel Ich bin in meinem Datenabruf Ansatz, kann ich CURL, WGET, fopen etc.

Ein Ansatz, den ich in Anbetracht bin ist

$fp = fopen("http://www.website.com","r");
fseek($fp,5000);
$data_to_parse = fread($fp,6000);

Heißt das oben werde ich nur von www.website.com übertragen 6kb, oder wird fopen Last www.website.com in den Speicher bedeutet, ich werde noch die volle 50kb übertragen?

War es hilfreich?

Lösung

Sie können möglicherweise auch erreichen, was Sie suchen CURL mit als auch.

Wenn Sie in der Dokumentation suchen CURLOPT_WRITEFUNCTION kann einen Rückruf registrieren, die aufgerufen wird, wenn Daten zum Lesen von CURL zur Verfügung stehen. Sie könnten dann zählen die Bytes empfangen, und wenn man mehr als 6000 Bytes empfangen haben, können Sie 0 zurück, den Rest der Übertragung abzubrechen.

Die Libcurl Dokumentation beschreibt den Rückruf ein bisschen mehr:

  

wird diese Funktion durch Libcurl aufgerufen, sobald es Daten erhalten werden, die Bedürfnisse zu sein   Gerettet. Gibt die Anzahl der Bytes   tatsächlich gesorgt. Wenn dieser Betrag   unterscheidet sich von den übergebenen Betrag auf Ihr   Funktion, wird es einen Fehler auf das Signal   Bibliothek, und es wird die Übertragung abbrechen   und Rückkehr CURLE_WRITE_ERROR.

     

Die Callback-Funktion wird übergeben   so viele Daten wie möglich in allen   Invokes, aber Sie können möglicherweise nicht machen   alle Annahmen. Es kann ein Byte sein,   kann es Tausende sein.

Andere Tipps

Das ist ein HTTP, dass eine CURL Frage in der Tat.

Wie Sie erraten, die ganze Seite wird heruntergeladen werden, wenn Sie fopen verwenden. Egal, dann, wenn Sie bei Offset 5000 suchen oder nicht.

Der beste Weg zu erreichen, was Sie wollen eine Teil-HTTP-GET-Anforderung zu verwenden wäre, wie in HTML RFC angegeben ( http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html ):

  

Die Semantik der GET-Methode ändern   auf einen „partiellen GET“, wenn die Anforderung   Nachricht enthält ein Range-Header-Feld.   Ein Teil GET-Anforderungen, daß nur ein Teil   des Unternehmens übertragen werden, wie   in Abschnitt 14.35 beschrieben. Das   Teil-GET-Methode soll   unnötige Netzwerknutzung reduzieren   so dass teilweise abgerufen Entitäten   abgeschlossen werden, ohne die Übertragung   Daten, die bereits vom Kunden gehalten werden.

Die Details der Teil GET-Anfragen Bereiche verwendet, wird hier beschrieben: http://www.w3.org/Protocols/rfc2616/ RFC2616-sec14.html # sec14.35.2

versuchen, eine HTTP RANGE Anfrage :

GET /largefile.html HTTP/1.1
Range: bytes=0-6000

wenn vom Server unterstützten Bereichsanforderungen , wird es einen 206 Partial Content Antwortcode mit einem Content-Range-Header und Ihrem Wunsch-Bereich von Bytes zurückgeben (wenn es nicht tut, wird es 200 und die gesamte Datei zurück). finden Sie unter http://benramsey.com/archives/206-partial- Inhalt-and-Range-Requests / für eine schöne Erklärung von Bereichsanforderungen.

siehe auch fortsetzbar Downloads, wenn PHP mit der Datei senden ? .

Es wird die ganze Seite mit der fopen herunterladen nennen, aber dann wird es nur von dieser Seite lesen 6kb.

Von der PHP-Handbuch:

  

Beim Lesen wird beendet, sobald eine der folgenden Bedingungen erfüllt ist:

     
      
  • Länge Bytes gelesen wurden
  •   
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top