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

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Anonymous

Beitrag von Anonymous » 20.07.2008, 17:06

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...

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

Beitrag von Burns » 20.07.2008, 19:26

joa die Fehlermeldung konnt ich schon zuordnen, wollt eben darauf anspielen dass es nicht überall funst, safe_mode wird doch allgemein on sein oder ?

Anonymous

Beitrag von Anonymous » 20.07.2008, 20:51

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...

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

Beitrag von Burns » 20.07.2008, 21:12

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ß

Elradon
PostRank 8
PostRank 8
Beiträge: 867
Registriert: 23.08.2006, 15:36

Beitrag von Elradon » 20.07.2008, 23:19

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

Anonymous

Beitrag von Anonymous » 21.07.2008, 00:03

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....

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag