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

Anzeige von ABAKUS

von Anzeige von ABAKUS »

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

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 20.07.2008, 15:16

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.

Burns
PostRank 5
PostRank 5
Beiträge: 296
Registriert: 10.06.2008, 18:54

Beitrag von Burns » 20.07.2008, 15:30

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