2016-12-25 53 views
0

我想使用yts api,並且我寫了下面的代碼。Urllib2不工作,http禁止的錯誤

import urllib2 
import json 

url = 'https://yts.ag/api/v2/list_movies.json?quality=3D' 

json_obj = urllib2.urlopen(url) 

data = json.load(json_obj) 

print data 

但我遇到了以下錯誤:

File "<stdin>", line 1, in <module> 
    File "C:\Python27\lib\urllib2.py", line 154, in urlopen 
    return opener.open(url, data, timeout) 
    File "C:\Python27\lib\urllib2.py", line 435, in open 
    response = meth(req, response) 
    File "C:\Python27\lib\urllib2.py", line 548, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "C:\Python27\lib\urllib2.py", line 473, in error 
    return self._call_chain(*args) 
    File "C:\Python27\lib\urllib2.py", line 407, in _call_chain 
    result = func(*args) 
    File "C:\Python27\lib\urllib2.py", line 556, in http_error_default 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
urllib2.HTTPError: HTTP Error 403: Forbidden 

幫助我如何解決這個

+1

可能重複:http://stackoverflow.com/questions/13303449/urllib2-httperror-http-error-403-forbidden – UnholySheep

回答

1

我不能完全肯定這是怎麼回事你的urllib2的要求,因爲它工作正常與我測試的其他網址一起,有和沒有JSON響應。

我懷疑這是質量= 3D查詢的編碼,但我的簡短嘗試處理也失敗了。

簡單地將請求放在瀏覽器中就像下面的「請求」代碼一樣工作。

簡而言之,我並沒有真正回答你關於修復urllib2使用情況的問題,但肯定解決了獲取數據的問題。

我建議在這種情況下使用'requests'模塊。嘗試

import requests 
import json 

url = 'https://yts.ag/api/v2/list_movies.json?quality=3D' 

response = requests.get(url = url) 

data = response.json() 

print data 

請注意,請求response.json()爲您處理json.load()。

它會爲您節省很多頭痛的urllib2。

的 '請求' 的文檔: http://docs.python-requests.org/en/latest/