【问题标题】:urllib2 fetch web page [closed]urllib2 获取网页 [关闭]
【发布时间】:2013-03-13 11:25:15
【问题描述】:

我有一个让我发疯的问题。我正在使用 urllib2 来获取许多 url。有一个 url 有时会返回给我整个 html 页面,有时不会。这是我的代码:

def find_html(url):
    req = urllib2.Request(url)
    req.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB;   rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14')
    page_html = urllib2.urlopen(req).read()

    n = string.find(page_html, "filter clearfix active")
    print "find element:",n

url = "http://it.hotels.com/ho113127/rome-cavalieri-waldorf-astoria-hotels-resorts-roma-italia/"
find_html(url)

为什么会这样?我在哪里做错了? (我不想对这个 url 使用 selenium,我想使用 urllib2)

【问题讨论】:

  • 如果只是一个 URL,也许是那个服务器?我怀疑这是 Python 或 urllib2 的问题..
  • 我认为是服务器。使用这种网址我有这个问题

标签: python urllib2 fetch web-crawler


【解决方案1】:

我从该 URL 收到 200 和 301 (Moved Permanently) 响应,所以这是服务器问题。

由于urllib2 将自动跟随重定向,如果您想阻止处理重定向页面(如果我理解正确,它不包含您想要的信息),您必须检查是否发生了重定向:

...
response = urllib2.urlopen(req)
if response.geturl() == url:
  // no redirect occurred
else:
  // a redirect occurred because the url has changed

这取决于您的确切设置和您必须如何处理的意图(因为对于某些 URL,您实际上可能想要处理重定向的页面)。

【讨论】:

  • 谢谢@robertklep。如何查看返回给我的代码?
  • 我已经编辑了我的答案,因为我错误地认为 urllib2 不会处理重定向本身。
  • 如果我使用 python 请求,我会收到 200 个...我不明白...
  • 我不会处理重定向 url,我不会只处理原始 url。为什么服务器有时会重定向 url 而有时不会?
  • 谁知道 :) 可能是服务器配置错误。
猜你喜欢
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多