有没有办法解决以下问题?
httperror_seek_wrapper: HTTP Error 403: request disallowed by robots.txt
是解决此问题的唯一方法是联系网站所有者 (barnesandnoble.com).. 我正在建立一个可以为他们带来更多销售的网站,但不确定他们为什么会在一定深度拒绝访问。
我在 Python2.6 上使用 mechanize 和 BeautifulSoup。
希望有解决办法
有没有办法解决以下问题?
httperror_seek_wrapper: HTTP Error 403: request disallowed by robots.txt
是解决此问题的唯一方法是联系网站所有者 (barnesandnoble.com).. 我正在建立一个可以为他们带来更多销售的网站,但不确定他们为什么会在一定深度拒绝访问。
我在 Python2.6 上使用 mechanize 和 BeautifulSoup。
希望有解决办法
哦,你需要忽略 robots.txt
br = mechanize.Browser()
br.set_handle_robots(False)
如果您想在 Barnes & Noble 遇到可能的法律问题,您可以尝试对您的用户代理撒谎(例如,通过试图让人相信您是人类而不是机器人)。为什么不联系他们的业务发展部门并说服他们专门授权您呢?毫无疑问,他们只是想避免让他们的网站被某些类别的机器人(例如价格比较引擎)刮掉,如果您可以说服他们您不是其中之一,签署合同等,他们很可能愿意对你来说是个例外。
一种“技术”解决方法只是破坏了他们在 robots.txt 中编码的策略,这是一种高法律风险的方法,我永远不会推荐。顺便说一句,他们的 robots.txt 是如何读取的?
发出正确请求的代码:
br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
resp = br.open(url)
print resp.info() # headers
print resp.read() # content
Mechanize 会自动遵循 robots.txt,但如果您有权限,或者您已经通过 .. 考虑过道德规范,则可以禁用它。
在浏览器中设置标志:
browser.set_handle_equiv(False)
这会忽略 robots.txt。
此外,请确保限制您的请求,以免在他们的网站上施加过多负载。(请注意,这也降低了他们检测并禁止您的可能性)。
您收到的错误与用户代理无关。mechanize 默认情况下会在您使用它导航到站点时自动检查 robots.txt 指令。使用 mechanize.browser 的 .set_handle_robots(false) 方法禁用此行为。
设置您的User-Agent
标题以匹配一些真正的 IE/FF 用户代理。
这是我的 IE8 用户代理字符串:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; AskTB5.6)
在不讨论道德问题的情况下,您可以修改标题以使其看起来像 googlebot,或者 googlebot 是否也被阻止?
看起来,你必须做更少的工作来绕过robots.txt
,至少这篇文章说。因此,您可能必须删除一些代码才能忽略过滤器。