0

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

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 来获取正确响应有什么建议吗?

4

2 回答 2

3

看起来它需要 cookie ......(你可以用 urllib2 来做),但如果你这样做,一个更简单的方法是使用请求

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

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

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

使用 urllib2 类似于

import urllib2, cookielib

cookies = cookielib.CookieJar()
opener = urllib2.build_opener( urllib2.HTTPCookieProcessor(cookies) )
data = opener.open('url').read()
于 2012-12-16T22:13:13.197 回答
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
于 2012-12-16T22:20:49.933 回答