Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

PHP Webbot - Seiten scrapen und Formulare abschicken!

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
chaoz
PostRank 1
PostRank 1
Beiträge: 11
Registriert: 07.06.2004, 15:11

Beitrag von chaoz » 19.07.2008, 19:57

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!
https://www.chaoz.tv - Internet Marketing Ninja - SEO Blackhat