2012-12-16 29 views
0

使用urlopen也用于url查询似乎很明显。我试过是:使用python urlopen进行url查询

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

然而,它失败,禁止 当进入我的浏览器这个查询HTTP错误403这个特定的网址查询,它的工作原理。 当使用http://www.httpquery.com/提交查询时,它也可以使用。

你有没有建议如何使用Python的权利,以获得正确的回应?

+1

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

+0

在这里很好地工作 –

回答

3

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

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

这通常是一个容易得多,在Python中检索URL的压力较小。

requests会自动存储和重新使用cookies。创建一个会话在这里稍微有点矫枉过正,但是当你需要提交数据到登录页面等时,或者在一个站点上重复使用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 
+0

非常感谢,匿名懦夫,这是伎俩。使用BeautifulSoup分析内容也很有效。大! –