Webseiten mit PHP und CURL lesen

Wikipedia - Artikel WebcrawlerIm Artikel PHP Source IP-Adresse ändern habe ich beschrieben wie man die Interface Adresse in PHP setzt und eine Webseite mit den PHP-Funktionen fopen liest. Jedoch ist die Geschwindigkeit sehr bescheiden. fopen liefert 10 Seiten in der Minute wärend CURL 2000 Seiten in der Minute schafft. Da wird im Technikerprojekt mit der fopen Variante Performance Probleme hatten war ein Umstieg nötig.
Neben dem Vorteil, dass die Geschwindigkeit erheblich besser ist, bietet CURL viele weitere Optionen.

Die Erklärung der im Beispiel genutzten Optionen ist einfach:

  • CURLOPT_RETURNTRANSFER – Die Webseite wird zurückgegeben
  • CURLOPT_URL – Adresse der Webseite
  • CURLOPT_USERAGENT – Ein UserAgent-String wird gesetzt

Andere IP-Adresse

Um die Verbindung über ein anderes Netzwerkinterface aufzubauen wird der Option CURLOPT_INTERFACE einfach die jeweilige IP übergeben.

Über den Proxy…

Natürlich kann CURL auch die Verbindung über einen Proxy herstellen. Dafür gibt es die Optionen CURLOPT_PROXY, diese erwartet die IP Adresse des Proxy und CURLOPT_PROXYPORT für den Port.

Beispiel

Im Programmierbeispiel wird die Webseite zum Thema Webcrawler in Wikipedia geladen. Dem Server wird dabei der Browser Firefox 3.0.8 vorgespielt. Wenn die Konstante PROXY_ENABLE den Wert true hat, wird die Verbindung über das Interface mit der IP-Adresse 192.168.0.65 hergestellt. In diesem Fall könnte es z.B. sein, dass der Proxy nur Verbindungen von bestimmten IP’s zulässt. Mit den beiden letzten Optionen wird die Verbindung über den Proxy-Server an der Adresse 192.168.0.111:3128 versucht.
Zuletzt werden die so erhaltenen Daten in der Variable $PlainWebsite gespeichert und der CURL-Zeiger geschlossen.

<? $ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, "http://de.wikipedia.org/wiki/Webcrawler");
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv: 1.9.0.8) Gecko/2009032609 Firefox/3.0.8 (.NET CLR 3.5.30729)');
if(PROXY_ENABLE) {
curl_setopt($ch, CURLOPT_INTERFACE, '192.168.0.65');
curl_setopt($ch, CURLOPT_PROXY, '192.168.0.111');
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
}
if($data = @curl_exec($ch)) {
 $PlainWebsite = $data;
 }
 curl_close($ch);
?>

So funktioniert auch ein einfacher, mittels PHP selbst gebauter Webcrawler

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Du kannst diese HTML-Tags und -Attribute verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>