【问题标题】:urllib2 and wget returns HTTP 403 (forbidden), while browser returns OKurllib2 和 wget 返回 HTTP 403(禁止),而浏览器返回 OK
【发布时间】:2012-12-03 05:24:19
【问题描述】:

我的浏览器可以访问一个网页,但urllib2.urlopen()(Python)和wget都返回HTTP 403(禁止)。有没有办法弄清楚发生了什么?

我使用最原始的形式,例如urllib2.urlopen("http://test.com/test.php"),对浏览器和wget 使用相同的url (http://test.com/test.php)。在测试之前,我已经清除了浏览器中的所有 cookie。

非常感谢!

【问题讨论】:

  • 我试过了,它会打印success bla你正在运行什么系统和什么版本的python。
  • 该网站可能阻碍了屏幕抓取。见http://test.com/robots.txt。尝试更改 User-Agent 标头。
  • @enginefree 我不认为 OP 的字面意思是 http://test.com/test.php
  • @J.F.Sebastian 他们还能做些什么来阻止屏幕抓取?我制作的标题与我在 LiveHTTPheaders 中看到的完全一样
  • 关闭浏览器中的javascript、flash、图片是否有效?

标签: python http-headers httprequest urllib2 http-status-code-403


【解决方案1】:

Python 库 urllib 有一个默认的用户代理字符串,其中包含 Python 一词,而 wget 使用“wget/VERSION”。如果您正在连接的站点检查用户代理信息,它可能会拒绝这两个。例如,谷歌就会这样做。

很容易修复.. 对于 wget,使用 -U 参数,对于 urllib,创建一个带有适当字符串的 URLOpener。

【讨论】:

  • 或者先查看 robots.txt 文件
  • robots.txt 文件是可选的 - 爬虫不需要检查它 - 爬虫的用户代理与文件内容之间的匹配不会导致服务器返回403.跨度>
【解决方案2】:

有些网站不允许网页抓取。尝试使用Python requests

这个库应该可以工作。

【讨论】:

  • 谢谢,但是 requests 和 urllib2 之间的根本区别是什么?它仍然是关于构建一个 HTTP 请求并将其发送出去,对吧>?
猜你喜欢
  • 2019-10-29
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 2013-08-18
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多