lệnh shell này thành côngHTTP 403 lỗi lấy robots.txt với 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
và in robots.txt. Bỏ qua tùy chọn tác nhân người dùng sẽ dẫn đến lỗi 403 từ máy chủ. Kiểm tra tệp robots.txt cho biết rằng nội dung dưới http://www.fifa-infinity.com/board được phép thu thập dữ liệu. Tuy nhiên, sau thất bại (mã python):
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')
Và sản lượng trên giao diện điều khiển của tôi là:
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
Kỳ lạ thay, sử dụng curl mà không cần thiết lập các kết quả user-agent trong "403: Forbidden" hơn hơn "403: Hành vi xấu".
Tôi đang làm gì đó sai, hoặc là lỗi này trong cơ giới hóa/urllib2? Tôi không thấy cách đơn giản nhận được robots.txt có thể là "hành vi xấu"?
Và một ví dụ về tiêu đề đánh hơi xấu đi. Các máy chủ ở phía bên kia đang xem xét nhiều hơn rằng các đại lý UA, kiểm tra những gì tiêu đề 'curl' được gửi, so sánh chúng với những gì' mechanize' đang sử dụng, điều chỉnh, rince, lặp lại. Đây là * không * một vấn đề python. –
Vấn đề này trông rất giống với [urllib2.HTTPError: Lỗi HTTP 403: Bị cấm] (https://stackoverflow.com/questions/13303449/urllib2-httperror-http-error-403-forbidden/46213623#46213623) – djinn