2014-06-13 53 views
0

我有一些非常簡單的python代碼,它試圖獲取網頁的HTML。當在已知的可用url上使用urllib.request.urlopen()時發生HTTPError

import urllib 

url = 'https://www.____.com'  # A URL that works in my browser 
u = urllib.request.urlopen(url) 

然後我用u找到網頁上的鏈接和下載文件。

我一直在使用此代碼幾天沒有問題,但現在我收到一個HTTPError 503: Service Temporarily Unavailable當我嘗試打開該URL。我對這類東西並不十分了解,但我認爲該網站發現一個機器人不斷嘗試訪問並以某種方式阻止了它。

我該如何解決這個問題?是否有更友好的網頁檢索方式?

回答

0

根據pictuga's answer to a similar question,問題可能是由urllib.request.urlopen指定的默認user agent被網站禁止,以防止網絡爬蟲訪問該網站。您可以通過設置自定義用戶代理,當你打開你的要求來繞過這個限制,爲的Python 3.3文檔中所示爲urllib.request.Request

頭應該是一個字典,而將被視爲如果add_header () 以每個鍵和值作爲參數被調用。這通常用於 「欺騙」User-Agent標頭,瀏覽器使用它來標識 本身 - 某些HTTP服務器僅允許來自普通 瀏覽器的請求,而不是腳本。例如,Mozilla Firefox可能會自行標識爲「Mozilla/5.0(X11; U; Linux i686)Gecko/20071127 Firefox/2.0.0.11」,而urllib的默認用戶代理字符串爲 「Python-urllib/2.6」 (在Python 2.6上)。

換句話說,應該通過使自定義用戶代理urllib.request.Requestheaders字典(與關鍵"User-Agent")的一部分創建Request對象。然後,您可以通過請求urllib.request.urlopen來獲得(希望成功)的回覆。有關顯示此方法的代碼,請查看Oleh Prypin's answer here

相關問題