0

我想使用以下代码访问存储在站点中的数据:

import urllib
import re
import json

htmltext = urllib.urlopen("http://www.cmegroup.com/CmeWS/mvc/ProductSlate/V1/List/500/1?sortField=oi&sortAsc=false&venues=3&page=1&cleared=1&group=1&r=eSxQS2SI").read()

print htmltext

#data = json.load(htmltext)

我得到回应:

You don't have permission to access "http&#58;&#47;&#47;www&#46;cmegroup&#46;com&#47;CmeWS&#47;mvc&#47;ProductSlate&#47;V1&#47;List&#47;500&#47;1&#63;" on this server.<P>

有没有办法访问这些信息,或者有没有其他方法可以从提供的链接中提取信息?

4

3 回答 3

4

由于可以从浏览器访问该链接,因此服务器似乎不允许纯 HTML 请求(没有 User-Agent 标头)。我们可以使用urllib2模拟这样的请求

import urllib2

url = "http://www.cmegroup.com/CmeWS/mvc/ProductSlate/V1/List/500/1?sortField=oi&sortAsc=false&venues=3&page=1&cleared=1&group=1&r=eSxQS2SI"
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }

req = urllib2.Request(url, headers=headers)

response = urllib2.urlopen(req)

your_json = response.read()
response.close()
于 2013-05-19T15:27:48.957 回答
2

我也在使用 liburl2 解决这个问题,这是我最终得到的答案,在能够在 chrome 中加载页面后,我意识到这是基于正在发送的标头的服务器阻塞,所以我想出了这个:

import urllib2
import re
import json

opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
response = opener.open('http://www.cmegroup.com/CmeWS/mvc/ProductSlate/V1/List/500/1?sortField=oi&sortAsc=false&venues=3&page=1&cleared=1&group=1&r=eSxQS2SI')
data = json.load(response)
print data

这就像一种享受。

于 2013-05-19T15:34:22.677 回答
2

网络服务器似乎阻止了基于用户代理的请求。

使用不同的 http 用户代理就可以了。

此外,您应该使用 Python 的“请求”模块,让您更灵活地控制请求数据。

wget -U Mozilla "http://www.cmegroup.com/CmeWS/mvc/ProductSlate/V1/List/500/1?sortField=oi&sortAsc=false&venues=3&page=1&cleared=1&group=1&r=eSxQS2SI"

--2013-05-19 17:24:54--  http://www.cmegroup.com/CmeWS/mvc/ProductSlate/V1/List/500/1?sortField=oi&sortAsc=false&venues=3&page=1&cleared=1&group=1&r=eSxQS2SI
Resolving www.cmegroup.com (www.cmegroup.com)... 23.45.237.124
Connecting to www.cmegroup.com (www.cmegroup.com)|23.45.237.124|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 17349 (17K) [application/json]
Saving to: ‘1?sortField=oi&sortAsc=false&venues=3&page=1&cleared=1&group=1&r=eSxQS2SI’
于 2013-05-19T15:26:54.033 回答