Zur Navigation

Webcrawler [3]

bauen und hosten

21 Jörg Kruse

Er muß immerzu nur anfordern, auswerten, anfordern, auswerten, anfordern, auswerten...

Ja, so ist ganz grob gesehen der Ablauf

14.12.2015 16:32

22 Ranma (Gast)

Aber dann ist es schon komisch, daß man einen Bot per robots.txt darum bittet, bestimmte Dinge nicht anzufordern, statt diese Dinge einfach nicht auszuliefern.

Für meinen Crawler gibt es nur eine relevante robots.txt und die verlangt nicht mehr als regelmäßige Pausen. Also braucht der Crawler nichtmal die robots.txt oder Meta-tags auswerten können. Das sollte es noch leichter machen. Die Wiktionaries unterschiedlicher Sprachen sind leider nicht ganz gleich aufgebaut. In der deutschsprachigen habe ich schonmal eine Liste gefunden, die alle Einträge verlinkt, die einzelnen Einträge verweisen vor allem auf die Wikipedia und fast nie auf weitere Einträge. Also muß der Crawler nur der Liste entlang. Die ist auf viele Seiten aufgeteilt, unterschieden durch eine GET-Variable &from= mit einer Zeichenkette als Inhalt. Das sollte beim anfordern keinen Unterschied machen. Weil fast alles innerhalb eines Links zu finden ist, sind fremdschriftliche Zeichen urlencoded. Da muß ich mir noch überlegen, wie das in die Datenbank einzutragen ist. Wiktionary ist vermutlich ziemlich vertrauenswürdig.
Ranma

16.12.2015 02:10

23 Ranma (Gast)

Jetzt fällt mir noch etwas Wichtiges zum Crawlerbau ein. Wenn eine Netzseite angefragt wird, dann liefert der angesprochene Server zunächst einen HTTP-Statuscode. Könnte ja sein, daß etwas mit der Verbindung nicht stimmt. Darum sollte ein Skript den HTTP-Statuscode berücksichtigen. Gesendet wird er wohl mit einem Header wie dem, den man in PHP als Funktion findet. Aber wie wird der HTTP-Statuscode aufgefangen? Also wo würde mein Skript den finden?
Ranma

16.12.2015 06:22

24 Jörg Kruse

Aber dann ist es schon komisch, daß man einen Bot per robots.txt darum bittet, bestimmte Dinge nicht anzufordern, statt diese Dinge einfach nicht auszuliefern.

Ein Nicht-Ausliefern bedeutet in der Regel nicht, dass der Webserver nicht antwortet, sondern dass er einen Status-Code ohne Inhalt ausliefert, z.B. 403 "Forbidden" oder 404 "Not Found". Es würde ihn also definitiv entlasten, wenn er erst gar keine Anfragen erhält.

Für meinen Crawler gibt es nur eine relevante robots.txt und die verlangt nicht mehr als regelmäßige Pausen. Also braucht der Crawler nichtmal die robots.txt oder Meta-tags auswerten können.

Der Inhalt der robots.txt kann sich aber ändern. Und eine Meta-Angabe "robots" kann zusätzliche Verbote enthalten, die nicht dadurch entwertet werden, dass die robots.txt alles erlaubt.

Wenn eine Netzseite angefragt wird, dann liefert der angesprochene Server zunächst einen HTTP-Statuscode.

Bei einem Status Code 200 "OK" wird der Inhalt durch zwei Zeilenumbrüche getrennt an den Header angehängt - er kommt also mit dem selben Paket an

Aber wie wird der HTTP-Statuscode aufgefangen?

Wenn du eine Socket-Verbindung über fsockopen() herstellst, kannst du die komplette Antwort, inklusive HTTP-Header, auslesen, siehe hierzu auch Beispiel #1 im Manual:

http://php.net/manual/de/function.fsockopen.php

16.12.2015 15:30 | geändert: 16.12.2015 15:33

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]