Seite 1 von 1

PHP Webbot - Seiten scrapen und Formulare abschicken!

Verfasst: 19.07.2008, 19:57
von chaoz
Heute möchte ich mal ein kleines PHP Script veröffentlichen, mit dem ihr Webseiten scrapen oder Formulare abschicken könnt. Zusätzlich hab ich ein praktisches Beispiel angehängt, wie ihr euch damit z.B. bei Yigg einloggen könnt :)

Zunächst das Herzstück, die Webbot-Funktion :)

Code: Alles auswählen

<?php
function webbot&#40; $url, $method=0, $fields=0, $lighttpd=0, $proxy=0 &#41;
&#123;
  $socket = curl_init&#40;&#41;;
  CURL_SETOPT&#40;$socket, CURLOPT_URL, $url&#41;;
  CURL_SETOPT&#40;$socket, CURLOPT_FOLLOWLOCATION, 2&#41;;
  CURL_SETOPT&#40;$socket, CURLOPT_RETURNTRANSFER, 1&#41;;
  &#40; &#40; $lighttpd &#41; ? curl_setopt&#40;$socket, CURLOPT_HTTPHEADER, array&#40;"Expect&#58;"&#41;&#41; &#58; '' &#41;;
  &#40; &#40; $method &#41; ? CURL_SETOPT&#40;$socket, CURLOPT_POST, 1&#41; &#58; CURL_SETOPT&#40;$socket, CURLOPT_POST, 0&#41; &#41;;
  &#40; &#40; $method &#41; ? CURL_SETOPT&#40;$socket, CURLOPT_POSTFIELDS, $fields&#41; &#58; '' &#41;;
  &#40; &#40; $proxy &#41; ? CURL_SETOPT&#40;$socket, CURLOPT_PROXY, $proxy&#41; &#58; '' &#41;;
  CURL_SETOPT&#40;$socket, CURLOPT_SSL_VERIFYPEER, 0&#41;;
  CURL_SETOPT&#40;$socket, CURLOPT_USERAGENT, "Mozilla/4.0 &#40;compatible; MSIE 6.0; Windows NT 5.1&#41;"&#41;;
  CURL_SETOPT&#40;$socket, CURLOPT_COOKIEJAR, "cookies.txt"&#41;;
  CURL_SETOPT&#40;$socket, CURLOPT_COOKIEFILE, "cookies.txt"&#41;;
  
  $page = curl_exec&#40;$socket&#41;;
  curl_close&#40; $socket &#41;;
  return $page;
&#125;
?>
Der Funktion können wir folgende Parameter übergeben:
1. URL
2. Die Methode -> 0 = GET, 1 = POST
3. Felder für ein Formular -> Array
4. lighttpd support -> eine 1 wenn es sich um lighttpd handelt
5. Proxy -> einfach einen Proxy eintragen z.B. '127.0.0.1:8001'

Um nun eine Seite zu scrapen, schreiben wir folgendes:

Code: Alles auswählen

<?php
$content = webbot&#40; 'http&#58;//www.google.de' &#41;;
echo $content;
?>
Wenn wir uns z.B. damit auf Yigg einloggen wollen müssten wir folgendes schreiben:

Code: Alles auswählen

<?php
function webbot&#40; $url, $method=0, $fields=0, $lighttpd=0, $proxy=0 &#41;
&#123;
  $socket = curl_init&#40;&#41;;
  CURL_SETOPT&#40;$socket, CURLOPT_URL, $url&#41;;
  CURL_SETOPT&#40;$socket, CURLOPT_FOLLOWLOCATION, 2&#41;;
  CURL_SETOPT&#40;$socket, CURLOPT_RETURNTRANSFER, 1&#41;;
  &#40; &#40; $lighttpd &#41; ? curl_setopt&#40;$socket, CURLOPT_HTTPHEADER, array&#40;"Expect&#58;"&#41;&#41; &#58; '' &#41;;
  &#40; &#40; $method &#41; ? CURL_SETOPT&#40;$socket, CURLOPT_POST, 1&#41; &#58; CURL_SETOPT&#40;$socket, CURLOPT_POST, 0&#41; &#41;;
  &#40; &#40; $method &#41; ? CURL_SETOPT&#40;$socket, CURLOPT_POSTFIELDS, $fields&#41; &#58; '' &#41;;
  &#40; &#40; $proxy &#41; ? CURL_SETOPT&#40;$socket, CURLOPT_PROXY, $proxy&#41; &#58; '' &#41;;
  CURL_SETOPT&#40;$socket, CURLOPT_SSL_VERIFYPEER, 0&#41;;
  CURL_SETOPT&#40;$socket, CURLOPT_USERAGENT, "Mozilla/4.0 &#40;compatible; MSIE 6.0; Windows NT 5.1&#41;"&#41;;
  CURL_SETOPT&#40;$socket, CURLOPT_COOKIEJAR, "cookies.txt"&#41;;
  CURL_SETOPT&#40;$socket, CURLOPT_COOKIEFILE, "cookies.txt"&#41;;
  
  $page = curl_exec&#40;$socket&#41;;
  curl_close&#40; $socket &#41;;
  return $page;
&#125;

function login&#40; $name, $pwd &#41;
&#123;	
  $data = webbot&#40;'http&#58;//www.yigg.de/login'&#41;;
  preg_match&#40;"/name=\"login\&#91;_csrf_token\&#93;\" value=\"&#40;.*&#41;\" id=\"login__csrf_token\"/", $data, $found&#41;;
   
  $fields&#91;'login&#91;_csrf_token&#93;'&#93; = $found&#91;1&#93;;
  $fields&#91;'login&#91;username&#93;'&#93; = $name;
  $fields&#91;'login&#91;password&#93;'&#93; = $pwd;
  $fields&#91;'login&#91;remember&#93;'&#93; = 'on';
  $fields&#91;'commit'&#93; = 'Anmelden';
  
  $url = 'http&#58;//www.yigg.de/login';
  $data = webbot&#40; $url, 1, $fields, 1 &#41;;
  
  return $data;
&#125;

$content = login&#40; 'username', 'password'&#41;;
echo $content;
?>
Viel Spaß damit!

Verfasst:
von
Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Re: PHP Webbot - Seiten scrapen und Formulare abschicken!

Verfasst: 20.07.2008, 15:16
von Mork vom Ork
chaoz hat geschrieben:Der Funktion können wir folgende Parameter übergeben:

2. Die Methode -> 0 = GET, 1 = POST
Wird mir immer ein Rätsel bleiben, warum manche Leute ihre Funktionen unbedingt mit nummerischen Codes verkomplizieren müssen, anstatt einfach aussagekräftige Namen (hier: "GET" und "POST") zu nutzen.

Verfasst: 20.07.2008, 15:30
von Burns
funst leider nich bei mir


Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set

Verfasst:
von

Verfasst: 20.07.2008, 17:06
von net(t)worker
Burns hat geschrieben:funst leider nich bei mir


Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set

steht aber doch in der Fehlermeldung das es an deinem webspace liegt... entweder ist der safe_mode aktiviert oder ein open_basedir eingestellt...

Verfasst: 20.07.2008, 19:26
von Burns
joa die Fehlermeldung konnt ich schon zuordnen, wollt eben darauf anspielen dass es nicht überall funst, safe_mode wird doch allgemein on sein oder ?

Verfasst: 20.07.2008, 20:51
von net(t)worker
Burns hat geschrieben:joa die Fehlermeldung konnt ich schon zuordnen, wollt eben darauf anspielen dass es nicht überall funst, safe_mode wird doch allgemein on sein oder ?
nope... save_mode disqualifiziert in meinen Augen einen Webspace-Anbieter direkt, weil viele Scripte erst garnicht laufen...

Verfasst: 20.07.2008, 21:12
von Burns
ahso, wusste ich nicht
Hatte damit aber auch noch nie Probleme

Gibt ja auch viele Möglichkeit eine Webseite auszulesen mit weniger Zeilen Programmcode, kommt eben auf die Verwendung an.

Hätte nur gern die benötigte Zeit getestet und wenns schneller wäre eben verwendet.

Gruß

Verfasst: 20.07.2008, 23:19
von Elradon
Hmm, safe_mode allgemein auf on zu halten, find ich schon als sinnvoll. Wenn etwas nicht läuft, kann man es schließlich immer noch umstellen. Aber ist ja auch Geschmackssache.

Ich bin mal ganz ehrlich: kann mir jemand erklären, was dies Ding machen soll? ich hab ja schon versucht was rauszufinden, aber 0X

Verfasst: 21.07.2008, 00:03
von net(t)worker
Elradon hat geschrieben:Hmm, safe_mode allgemein auf on zu halten, find ich schon als sinnvoll. Wenn etwas nicht läuft, kann man es schließlich immer noch umstellen. Aber ist ja auch Geschmackssache.
naja... wenn man es selber entscheiden kann gehzts ja noch, aber vielfach bekommt man den safe_mode vorgesetzt und kann ihn nicht deaktivieren... man kann eine php installation auch ohne safe_mode sichern, nzw. um eine Installation abzusichern reicht es nicht einfach den safe_mode auf on zu setzen... also einerseits sichert der safe_mode die php installation nicht wirklich ab, andererseits werden so einige PHP Funktionen grundsätzlich gesperrt... wer also behauptet das PHP nur mit safe_mode wirklich sicher ist, sollte sich doch einfach mal ein wenig mit dem Thema beschäftigen, anstatt einfach nur etwas nachzulabern...

und so finde ich es begrüßenswert das der safe_mode in PHP 6 endlich abgeschafft werden soll....