2013-05-19 34 views
0

我想用下面的代碼來訪問存儲在網站的數據:Python的接入服務器的urlopen()

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> 

是否有一種方式來獲得訪問這些信息,還是有另一種方法從提供的鏈接中提取信息?

回答

3

由於鏈接可以從瀏覽器訪問,它看起來像服務器不允許普通的HTML請求(沒有用戶代理標頭)。我們可以使用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() 
+0

謝謝像魅力一樣工作 – Josh

2

該網絡服務器似乎阻止基於用戶代理的請求。

使用不同的http用戶代理可以做到這一點。

此外,您應該使用Python的'requests'模塊,爲您提供更靈活的 控制您的請求數據。

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’ 
+0

所以-​​U標誌將它設置爲用戶代理? – Josh

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 

哪像對待工作。