2015-12-14 93 views
2

返回不同的HTTP狀態,我用下面的代碼:Python的請求包比瀏覽器

import requests 
url = 'http://www.transfermarkt.com/' 
r = requests.get(url) 
r.raise_for_status() 

而且我有以下的輸出:

HTTPError: 404 Client Error: Not Found for url: http://www.transfermarkt.com/ 

但鏈接從瀏覽器中正常工作。這是爲什麼發生?

回答

8

該網站管理員已決定,該網站應該假裝不存在沒有在他們的頭分享他們的用戶代理客戶端:

>>> import requests 
>>> url = 'http://www.transfermarkt.com/' 
>>> requests.get(url).raise_for_status() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/site-packages/requests/models.py", line 831, in raise_for_status 
    raise HTTPError(http_error_msg, response=self) 
requests.exceptions.HTTPError: 404 Client Error: Not Found 

的假期,因爲你已經發現了。設置一個用戶代理:

>>> headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:39.0)'} 
>>> requests.get(url, headers=headers).raise_for_status() 
>>> 

你很好。

看起來網站管理員不希望你這樣做,所以也許你可以請求許可或詢問是否有首選方式獲取內容,但沒有用戶代理集是技術原因。