Seite 1 von 1

crawler: angabe robotname && robotadmin?

Verfasst: Mittwoch 12. Januar 2005, 23:05
von rob
moin moin
ich muss für ein schulprojekt einen crawler programmieren. kann mir jemand einen tipp geben, wie ich den namen und admin angeben muss?
unter perl kann man ja einfach den LWP::RobotUA( name, mail_admin ) benützen, der das zur verfügung stellt.
unter python hab ich vor urllib und den robotparser zu benützen (?), aber keine ahnung, wie ich namen und admin übermitteln muss.

besten dank für die hilfe
rob

Verfasst: Samstag 15. Januar 2005, 00:06
von Gast
OK.

in der urllib ist die httplib mit der classe HTTPConnection. die hat die funktion putheader( alles was ein bot braucht ).

wenn es möglich ist, diese funktion zu benützen und die entsprechenden parameter zu setzen, ohne dass sie wieder von der urllib || httplib überschrieben werden, müsste das klappen.

allerdings hab ich erst grad mit python angefangen, und muss mich noch schlau machen wie.

Verfasst: Samstag 15. Januar 2005, 00:08
von rob
oje, das da oben war ein self reply. hab vergessen mich einzuloggen... :oops:

Verfasst: Samstag 15. Januar 2005, 10:42
von Milan
Leider nicht ganz richtig: die httplib ist nicht in der urllib, sie wird von dieser benutzt und ist ein eigenständiges Modul. Von daher kannst du ja gleich die httplib nutzen. Ich hab vorher nur deine Problemstellung nicht verstanden, jetzt wirds klarer.

Code: Alles auswählen

import httplib
con=httplib.HTTPConnection(server)
#jetzt die weiteren Befehle putheader, putrequest, getrequest etc

Verfasst: Montag 17. Januar 2005, 10:27
von rob
OK, vielen dank für die erläuterung.

das bedeutet allerdings auch, dass ich auf eventuell brauchbare, zusätzliche funktionalität der urllib verzichten müsste, da diese vermutlich einen eigenen header platziert. wobei ich mir noch nicht sicher bin, ob ich sie überhaupt brauche.

mehr sorgen macht mir, dass ich einen eigenen header bauen werden muss, und wie ein minimalheader auszusehen hat. denn irgenwas muss ich ja der funktion putheader( header ) übergeben.
ich vermute mal, dass ich den standartheader, falls einer existiert, nicht erweitern kann, und einen komplett eigenen übergeben muss.

falls jemand weiss, was ein minimal-http-header mindestens enthalten muss, ich wäre um jeden tip dankbar, denn ausser der RFC an sich, finde ich nicht gerade viel im netz.

Verfasst: Montag 17. Januar 2005, 19:34
von Milan
Das hängt ganz davon ab, was du anfordern willst. Minimalheader werden schon durch request gemacht, aber das ist wirklich nur die Anfrage. Am besten du schaust dir mal den Quelltext der urllib an, da wirst du Angaben finden, die dort benutzt werden. Die kannst du ja nach belieben verändern und anpassen.

Verfasst: Dienstag 18. Januar 2005, 00:10
von rob
ich hab ethereal und den perl script bemüht. was mir nicht klar war: putheader(...) schreibt zeilenweise, das wird einfach so oft wie man 's braucht aufgerufen mit je einer option.
so läuft das mal in einer minimalversion:

Code: Alles auswählen

#!/usr/bin/env python

import robotparser
import httplib

server = 'www.google.ch'
path = ''

robpars = robotparser.RobotFileParser()
robpars.set_url( 'http://' + server + '/robots.txt' )
robpars.read()

if robpars.can_fetch( '*', server + path ):

    print '\nAccess to ' + server + path + ' permitted\n'

    con = httplib.HTTP( server + path )
    con.putrequest( 'GET', '/' )
    con.putheader( 'Accept', 'text/html' )
    con.putheader( 'Accept', 'text/plain' )
    con.putheader( 'From', 'e@mail.com' )
    con.putheader( 'User-Agent', 'myCrawler' )
    con.endheaders()

    errcode, errmsg, headers = con.getreply()
    print errcode

    file = con.getfile()
    print file.read()
    file.close()

else:
    print '\nAccess to ' + server + path + ' denied\n'
besten dank nochmal für die hilfe :)