Diese Shell Befehl erfolgreichHTTP 403 Fehler Abrufen robots.txt mit mechanize
$ curl -A "Mozilla/5.0 (X11; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0 (compatible;)" http://fifa-infinity.com/robots.txt
und robots.txt druckt. Das Weglassen der Benutzer-Agent-Option führt zu einem 403-Fehler vom Server. Die Überprüfung der robots.txt-Datei zeigt, dass der Inhalt unter http://www.fifa-infinity.com/board zum Crawlen zugelassen ist. die folgenden fehlschlägt (Python-Code) jedoch:
import logging
import mechanize
from mechanize import Browser
ua = 'Mozilla/5.0 (X11; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0 (compatible;)'
br = Browser()
br.addheaders = [('User-Agent', ua)]
br.set_debug_http(True)
br.set_debug_responses(True)
logging.getLogger('mechanize').setLevel(logging.DEBUG)
br.open('http://www.fifa-infinity.com/robots.txt')
Und die Ausgabe auf meiner Konsole ist:
No handlers could be found for logger "mechanize.cookies"
send: 'GET /robots.txt HTTP/1.1\r\nAccept-Encoding: identity\r\nHost: www.fifa-infinity.com\r\nConnection: close\r\nUser-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0 (compatible;)\r\n\r\n'
reply: 'HTTP/1.1 403 Bad Behavior\r\n'
header: Date: Wed, 13 Feb 2013 15:37:16 GMT
header: Server: Apache
header: X-Powered-By: PHP/5.2.17
header: Vary: User-Agent,Accept-Encoding
header: Connection: close
header: Transfer-Encoding: chunked
header: Content-Type: text/html
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/moshev/Projects/forumscrawler/lib/python2.7/site-packages/mechanize/_mechanize.py", line 203, in open
return self._mech_open(url, data, timeout=timeout)
File "/home/moshev/Projects/forumscrawler/lib/python2.7/site-packages/mechanize/_mechanize.py", line 255, in _mech_open
raise response
mechanize._response.httperror_seek_wrapper: HTTP Error 403: Bad Behavior
Merkwürdigerweise curl verwenden, ohne die User-Agent-Ergebnisse Einstellung in "403: Verboten" eher als "403: Schlechtes Verhalten".
Bin ich irgendwie etwas falsch gemacht, oder ist das ein Fehler in mechanize/urllib2? Ich sehe nicht, wie einfach robots.txt "schlechtes Verhalten" sein kann?
Und ein weiteres Beispiel für Kopf Sniffing schlecht gegangen. Der Server auf der anderen Seite schaut mehr auf den UA-Agenten, überprüft, welche Header "curl" senden, vergleicht sie mit dem, was "mechanize" benutzt, justiert, rince, repeat. Das ist * kein * Python-Problem. –
Dieses Problem sieht ahnlich ähnlich zu [urllib2.HTTPError: HTTP Error 403: Forbidden] (https://stackoverflow.com/questions/13303449/urllib2-httperror-http-error-403-forbidden/46213623#46213623) – djinn