Alt 10.06.2011, 15:33:25   #1 (permalink)
Multitalent
Benutzerbild von joschilein

ID: 9301
Lose-Remote

joschilein eine Nachricht über ICQ schicken
Reg: 05.05.2006
Beiträge: 1.414
joschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehen
Standard Proxys

Es geht darum verschiedene SEO-Abfragen über verschiedene Proxys zu erstellen.

Dazu brauche ich eine automatisch aktualisierte Liste gültiger Proxys und dann die Verwendung einer dieser Proxyinformation für eine Abfrage. Diese beiden Themenbereiche gliedere ich auf zwei Klassen aus.

Die erste Klasse (für die Liste) wird momentan noch durch die Rückgabe manuell eingetragener Arrays simuliert. Mein Problem ist die Klasse, welche die eigentliche Abfrage machen soll. Im ersten Schritt soll sie mal prüfen, ob der Proxy überhaupt (noch) funktioniert und dessen verwendete IP ermitteln. Ich kann mich ja schließlich nicht darauf verlassen, ob HTTP_X_FORWARDED_FOR verwendet wird und wenn könnte ich mir den Käse gleich sparen. Im Idealfall wäre die so ermittelte IP identisch mit der, die ich zur Proxyverbindung verwendet habe.

Nun habe ich aber schon festgestellt, dass die Interpretation der Ergebnisse gar nicht so einfach ist und möchte mal fragen ob das soweit richtig ist.
  1. Wenn es einen curl-Timeout (errno 28) gibt (testweise mal großzügige 20sec) ist wohl der Proxy nichts (mehr). Wobei es hier auch Unterschiede zu geben scheint, da über curl_getinfo() mal komplette 0er gezeigt werden und manchmal die time-Felder zwar was zeigen, aber download_content_length auf 0 steht. Wobei der zweite Fall eigentlich nicht an der Zielseite liegen kann, da ich bei paralleler Proxyverwendung bei anderen problem ein Ergebnis bekomme.
  2. Manche Proxys scheinen auf schwarzen Listen zu sein, wodurch zwar eine Ergebnisseite zurückgegeben wird, jedoch nicht die gewünschte Information darauf zu finden ist. Hier müsste ich ggf. noch unterscheiden können, ob ein preg_match wegen einem geblocktem Proxy oder einfach wegen einer Umstrukturierung des Html-Aufbaus fehl schlägt.
  3. Was mich nun am allermeisten wundert: Wenn ich mit mehreren Proxys parallel den selben IP-Lookup probiere, habe ich entweder Ergebnisse aus 1. oder 2. oder scheinbar gültige Ergebnisse. Nur warum wird bei manchen Proxys dann eine ganz andere IP ermittelt, als sie eigentlich haben sollten (weder die von mir erwartete, noch meine eigene, zusätzlich pro Aufruf wieder anders)? Habe ich Proxys erwischt, die selbst wieder Proxys nutzen? Ist das ein Bug oder Feature? Für meine Prüfung sollte es ja schonmal reichen, wenn nicht meine eigene IP ermittelt wird.


Heute schon gepixelt
joschilein ist offline   Mit Zitat antworten
Gesponsorte Links
Alt 10.06.2011, 18:57:38   #2 (permalink)
* {display:none;}

ID: 178362
Lose-Remote

Reg: 04.06.2006
Beiträge: 322
Graccem sorgt für eine eindrucksvolle AtmosphäreGraccem sorgt für eine eindrucksvolle AtmosphäreGraccem sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von joschilein Beitrag anzeigen
  1. Was mich nun am allermeisten wundert: Wenn ich mit mehreren Proxys parallel den selben IP-Lookup probiere, habe ich entweder Ergebnisse aus 1. oder 2. oder scheinbar gültige Ergebnisse. Nur warum wird bei manchen Proxys dann eine ganz andere IP ermittelt, als sie eigentlich haben sollten (weder die von mir erwartete, noch meine eigene, zusätzlich pro Aufruf wieder anders)? Habe ich Proxys erwischt, die selbst wieder Proxys nutzen? Ist das ein Bug oder Feature? Für meine Prüfung sollte es ja schonmal reichen, wenn nicht meine eigene IP ermittelt wird.
Das ist eindeutig ein Feature. Der Proxy könnte zum Beispiel an TOR angeschlossen sein.

https://www.torproject.org/

Bei curl solltest du auch die anderen Fehler behandeln.

http://curl.haxx.se/libcurl/c/libcurl-errors.html
Graccem ist offline   Mit Zitat antworten
Alt 10.06.2011, 22:19:07   #3 (permalink)
Erfahrener Benutzer

ID: 129556
Lose-Remote

Reg: 28.02.2010
Beiträge: 439
tobomator tobomator tobomator tobomator tobomator tobomator
Standard

ganz einfach:

www.wieistmeineip.de

als URL dem Proxy geben und dann bekommst du ein Ergebnis.
Die Proxy IP ist ja bekannt. Ist sie gleich dem aus dem Aufruf, dann ist es ok, sonst ist mindestens noch ein Proxy nachgeschalten.
Würde ich ebenfalls als ein Feature benennen.
tobomator ist offline   Mit Zitat antworten
Alt 11.06.2011, 05:26:57   #4 (permalink)
Multitalent
Benutzerbild von joschilein

ID: 9301
Lose-Remote

joschilein eine Nachricht über ICQ schicken
Reg: 05.05.2006
Beiträge: 1.414
joschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehen
Standard

Zitat:
Zitat von Graccem Beitrag anzeigen
Bei curl solltest du auch die anderen Fehler behandeln.
Klar, die Errorliste habe ich mir auch schon angeschaut. Es macht aber eigentlich fast keinen Unterschied warum eine Verbindung scheitert, außer es würde helfen zu unterscheiden, ob es an der Verbindung zum Proxy oder von diesem zum Ziel liegt. Im Zweifel wird einfach der nächste Proxy genutzt.

Zitat:
Zitat von tobomator Beitrag anzeigen
ganz einfach:
www.wieistmeineip.de
als URL dem Proxy geben und dann bekommst du ein Ergebnis.
Na über was habe ich wohl getestet, wenn nicht über diese und ähnliche Angebote. Was ich am Ende verwende überlege ich mir noch, kommt auch auf die Einfachheit der nötigen Regex-Patterns an. Vermutlich wird das eh rotierend verwendet. Aber noch muss ich auch mal das verhalten bei geblockten Proxys analysieren. Gibt es eigentlich auch Lookups die ein einfach strukturiertes xml oder ähnliches zurückliefern?


Heute schon gepixelt
joschilein ist offline Threadstarter   Mit Zitat antworten
Alt 11.06.2011, 10:52:34   #5 (permalink)
(X)HTML/CSS/JS/PHP
Benutzerbild von Helo

ID: 316075
Lose-Remote

Helo eine Nachricht über ICQ schicken
Reg: 31.03.2008
Beiträge: 731
Helo genießt hohes AnsehenHelo genießt hohes AnsehenHelo genießt hohes AnsehenHelo genießt hohes AnsehenHelo genießt hohes AnsehenHelo genießt hohes AnsehenHelo genießt hohes AnsehenHelo genießt hohes AnsehenHelo genießt hohes AnsehenHelo genießt hohes AnsehenHelo genießt hohes Ansehen
Standard

Zitat:
Zitat von joschilein Beitrag anzeigen
Gibt es eigentlich auch Lookups die ein einfach strukturiertes xml oder ähnliches zurückliefern?
Sowas?
http://api.hostip.info/
http://www.hostip.info/use.html
Helo ist offline   Mit Zitat antworten
Alt 13.06.2011, 16:58:18   #6 (permalink)
Erfahrener Benutzer

ID: 129556
Lose-Remote

Reg: 28.02.2010
Beiträge: 439
tobomator tobomator tobomator tobomator tobomator tobomator
Standard

mal gefragt, was ist eine SEO-Abfrage ?
was mit suchmaschinen, aber was genau ?

Nachtrag:
Es wird keine komplette Proxyliste geben, da es Ketten von Proxy's gibt, wo nur der erste als öffentlich bekannter zum greifen ist.
Soll der Anonymität dienen.
tobomator ist offline   Mit Zitat antworten
Alt 15.06.2011, 20:45:28   #7 (permalink)
Multitalent
Benutzerbild von joschilein

ID: 9301
Lose-Remote

joschilein eine Nachricht über ICQ schicken
Reg: 05.05.2006
Beiträge: 1.414
joschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehen
Standard

Also ich bin schon mal einen großen Schritt weiter. Die Verwendung der einzelnen Proxys funktioniert und auch meine Listenklasse kann nun automatisch Daten abfragen.

Nun bräuchte ich mal noch ein paar Ideen zur Sortierung. Also angenommen ich sage der Listenklasse, dass ich 5 valide Proxys möchte.
Die schaut dann in die DB nach folgendem Muster:
Code:
1:
2:
3:
4:
5:
SELECT id FROM proxys WHERE todelete = '0' AND (ISNULL(lastipergnum) OR lastimpergnum > 0) ORDER BY $order
Eine besondere Bedeutung kommt hier lastipergnum zu. Wenn ein Proxy geladen wird, schaut er erstmal welche IP er nach außen trägt. Wenn er das vor nicht all zu langer Zeit gemacht hat, unterlässt er eine erneute Abfrage (~15 min). lastipergnum kann folgende Werte haben.
Code:
1:
2:
3:
4:
5:
6:
7:
NULL: Noch gar nicht geprüft 2: Funktioniert mit dynamischer IP 1: Funktioniert mit statischer IP (für curl verwendetet) -1: Keine Daten (Proxy funktioniert nicht oder braucht zu lange) -2: Verbotene IP gefunden (HTTP_X_FORWARDED_FOR benutzt) -3: Beim Lookup geblockt -4: Lookup kann nicht analysiert werden (=Auffangcode)
Zusätzlich wird todelete dann auf 1 gesetzt, wenn entweder -2 auftritt (dem Proxy kann ich nicht trauen) oder zu oft -1 (Ich summiere auf wie oft ingesamt probiert und wie oft davon fehlgeschlagen). Später werde ich auch noch diejenigen mit zu langsamen durchschnittlichen Datenraten aussieben (aktuell wird erstmal nur Datenmenge und benötigte Zeit aus der curlinfo aufsummiert).

Mit obiger SQL-Abfrage habe ich also erstmal alle Proxyids, die valide sein sollten, das also zumindest zuletzt waren - z.B. aktuell 20 Stück. Bleibt noch die Frage, wie ich die am besten sortiere ($order ist ja noch offen) und wie ich ggf. neue einflechte (daher auch ISNULL).

Es sollen ja nicht immer die selben verwendet werden. Dennoch sollten die bevorzugt sein, die oft schnell reagiert haben. Außerdem ist es vorteilhaft, wenn diejenigen ihrer Lookupfrist genommen werden, da diese ja dann keine zusätzliche Prüfung der IP mehr machen. Und es gibt bestimmt noch einige andere Ansätze.
Die aktuellen Informationsspalten sind: lastiplookuptime, lastipergnum, lasterrortime, lasterror (z.B. 28 für timeout), numerrors, lastusetime, numuses, loadtime, loadsize.

Aktuell wird auch nur dann die Proxyliste nachgeladen, wenn durch das Query und die danach folgende validierung durch die jeweiligen Proxyobjekte nicht die angefragte Anzahl übrig bleibt. Würde ich nicht auf die positiven ergnums beschränken, würde ja stattdessen ggf. erst die komplette Liste invalider Proxys durchprobiert. Davon kann zwar der ein oder andere wieder aktiv werden (z.B. weil ein guter nur mal an einem schlechten Tag wegen Timeout eine -1 gefangen hat), aber die Wahrscheinlichkeit viele Fehlschläge zu haben ist natürlich groß. Da mache ich lieber parallel noch eine Extraroutine, die die invaliden ravalidiert.

Und dann gibt es auch noch die Frage, wie das ganze im Bezug auf Serps gut eingeflochten werden kann. Die Berechnung durch Frontendnutzer schließe ich aus, da die Ladezeiten einfach spürbar leiden würden (10 Seiten für ein Keyword sind schon nicht wenig). Aber auch für Backendnutzer, die das Gesamtpaket selbst anstoßen wollen, wäre der php-timeout ein Problem (ja verlängern und flush sind aber auch nicht so toll). Bleibt noch das Thema Cronjob oder eine Ajax-Lösung im Backend. Eines der letzten beiden werde ich wohl machen.

Zitat:
Zitat von Helo Beitrag anzeigen
Ähm ja, die leere api-Variante hatte ich wirklich noch nicht entdeckt (ist in den Beispielen ja immer mit konkreter IP verwendet).

Zitat:
Zitat von tobomator Beitrag anzeigen
mal gefragt, was ist eine SEO-Abfrage ?
was mit suchmaschinen, aber was genau ?
=> SERP-Scraping (jaja, böse )
(Das automatisiserte Auslesen von Suchmaschinenergebnislisten)

Zitat:
Zitat von tobomator Beitrag anzeigen
Es wird keine komplette Proxyliste geben, da es Ketten von Proxy's gibt, wo nur der erste als öffentlich bekannter zum greifen ist.
Ich brauche keine komplette Liste, sondern nur so viele wie ich brauche.


Heute schon gepixelt
joschilein ist offline Threadstarter   Mit Zitat antworten
Alt 16.06.2011, 00:04:04   #8 (permalink)
LoseTrader.de
Benutzerbild von DaxDony

ID: 373148
Lose-Remote

DaxDony eine Nachricht über ICQ schicken
Reg: 11.05.2008
Beiträge: 3.564
DaxDony genießt hohes AnsehenDaxDony genießt hohes AnsehenDaxDony genießt hohes AnsehenDaxDony genießt hohes AnsehenDaxDony genießt hohes AnsehenDaxDony genießt hohes AnsehenDaxDony genießt hohes AnsehenDaxDony genießt hohes AnsehenDaxDony genießt hohes AnsehenDaxDony genießt hohes AnsehenDaxDony genießt hohes Ansehen
Standard

Zitat:
Zitat von joschilein Beitrag anzeigen
=> SERP-Scraping (jaja, böse )
(Das automatisiserte Auslesen von Suchmaschinenergebnislisten)
Warum böse? Bietet Google da nicht selber eine API an?
DaxDony ist gerade online   Mit Zitat antworten
Alt 16.06.2011, 06:19:07   #9 (permalink)
Multitalent
Benutzerbild von joschilein

ID: 9301
Lose-Remote

joschilein eine Nachricht über ICQ schicken
Reg: 05.05.2006
Beiträge: 1.414
joschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehenjoschilein genießt hohes Ansehen
Standard

Die Web Search API steht seit Ende 2010 auf Depraced. Die neuere Custom Search API ist noch nicht ganz fertig und zudem stark limitiert.

Außerdem traue ich Google nicht so ganz. Es gibt ja schon unterschiedliche Ergebnisse, wenn man den num-Parameter verändert (z.B. 100 anstatt 10 Ergebnisse; wobei es da jetzt mit InstantPages sogar nicht mehr geht). Und das wird über ein Api-Key sicher nicht "neutraler" sein.


Heute schon gepixelt
joschilein ist offline Threadstarter   Mit Zitat antworten
Antwort

Gesponsorte Links

Anzeige
Günstig werben auf klamm.de!!


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:15:17 Uhr.