【问题标题】:using python urlopen for a url query使用 python urlopen 进行 url 查询
【发布时间】:2012-12-04 01:34:25
【问题描述】:

urlopen 也用于url 查询似乎很明显。我尝试的是:

import urllib2
query='http://www.onvista.de/aktien/snapshot.html?ID_OSI=86627'
f = urllib2.urlopen(query)
s = f.read()
f.close()

但是,对于这个特定的 url 查询,它会因为 HTTP 错误 403 被禁止而失败 在我的浏览器中输入此查询时,它可以工作。 同样,当使用http://www.httpquery.com/ 提交查询时,它也可以工作。

您对如何正确使用 Python 来获取正确响应有什么建议吗?

【问题讨论】:

  • 您的浏览器可能在 HTTP 请求中发送 cookie。从浏览器的 cookie jar 中提取 cookie,并将它们传递给 urlopen。您可能希望使用 Firebug 的 NextExport 扩展来保存浏览器最近发送的确切 HTTP 请求。如果你完全从 Python 中重放它们,它通常可以工作。

标签: python http url


【解决方案1】:

看起来它需要 cookie...(您可以使用 urllib2 执行此操作),但如果您这样做,更简单的方法是使用 requests

import requests
session = requests.session()
r = session.get('http://www.onvista.de/aktien/snapshot.html?ID_OSI=86627')

这通常是在 Python 中检索 URL 的一种更容易且压力更小的方法。

requests 将自动为您存储和重复使用 cookie。在这里创建会话有点矫枉​​过正,但当您需要将数据提交到登录页面等时很有用...,或者在整个站点中重复使用 cookie...等等...

使用 urllib2 类似于

import urllib2, cookielib

cookies = cookielib.CookieJar()
opener = urllib2.build_opener( urllib2.HTTPCookieProcessor(cookies) )
data = opener.open('url').read()

【讨论】:

    【解决方案2】:

    似乎 urllib2 默认用户代理已被主机禁止。您可以简单地提供您自己的用户代理字符串:

    import urllib2
    url = 'http://www.onvista.de/aktien/snapshot.html?ID_OSI=86627'
    request = urllib2.Request(url, headers={"User-Agent" : "MyUserAgent"})
    contents = urllib2.urlopen(request).read()
    print contents
    

    【讨论】:

    • 非常感谢你,匿名的懦夫,这成功了。并且使用 BeautifulSoup 分析内容也有效。太好了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    • 2021-06-17
    • 2021-04-25
    • 2021-12-21
    • 2012-10-28
    相关资源
    最近更新 更多