【问题标题】:Python's urllib2 doesn't work on some sitesPython 的 urllib2 在某些网站上不起作用
【发布时间】:2010-04-03 18:44:24
【问题描述】:

我发现使用 Python 的 urllib2(或 urllib)无法读取某些站点。一个例子……

urllib2.urlopen("http://www.dafont.com/").read()
# Returns ''

当您使用浏览器访问这些网站时,这些网站就会起作用。我什至可以使用 PHP 抓取它们(没有尝试其他语言)。我看到其他网站也有同样的问题 - 但现在不记得网址了。

我的问题是……

  1. 此问题的原因是什么?
  2. 有什么解决方法吗?

【问题讨论】:

  • 这不应被标记为 wiki。

标签: python urllib2 urllib


【解决方案1】:

我相信它被用户代理阻止了。您可以使用以下示例代码更改 User-Agent:

USERAGENT = 'something'
HEADERS = {'User-Agent': USERAGENT}

req = urllib2.Request(URL_HERE, headers=HEADERS)
f = urllib2.urlopen(req)
s = f.read()
f.close()

【讨论】:

  • 这些毫无头绪的网站似乎有意强迫每个人都使用通用 UA,最终破坏了每个人的标题。
【解决方案2】:

尝试设置不同的用户代理。查看this link中的答案。

【讨论】:

    【解决方案3】:

    我是发布问题的人。我有一些怀疑 - 但不确定 - 这就是我在这里发布问题的原因。

    这个问题的原因是什么?

    我认为这是由于主机使用robot.txt 或htaccess 阻止了urllib 库。但不确定。甚至不确定它是否可能。

    此问题的任何解决方法?

    如果您在 Unix 中,这将工作...

    contents = commands.getoutput("curl -s '"+url+"'")
    

    【讨论】:

    • 使用过时的模块来封装特定于平台的外部程序? /掌脸
    猜你喜欢
    • 1970-01-01
    • 2016-09-20
    • 2023-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多