2010-10-07 135 views
1

我試圖抓取一個網址,其中的URL被重定向,但是通過編程方式嘗試這樣會給我一個403錯誤代碼(Forbidden)。我可以將網址在瀏覽器和瀏覽器會遵循正確的URL,但...Python HTTP重定向請求被禁止

顯示一個簡單的例子,我試圖去: http://en.wikipedia.org/w/index.php?title=Mike_tyson

我試過的urllib2和機械化但是兩者都不起作用。我對網絡編程相當陌生,想知道是否還有其他一些技巧需要我遵循重定向!

謝謝!

編輯

好了,所以這是真的搞砸。我最初正在研究替代方法,因爲我試圖刮取一個Mp3。我正在設法成功下載mp3,但它全部被破壞。

原來,這與我在Windows或我目前的Python版本中下載它有某種關係。 我測試了我的Ubuntu發行版上的代碼,並且下載的mp3文件完全沒問題....

所以我只用了簡單的urllib2.openurl,它工作的很完美!

我想知道爲什麼在Windows上下載會損壞mp3?

+1

「我想知道爲什麼在Windows上下載會損壞mp3?」呃,因爲它是真正的操作系統的玩具般的藉口? – aaronasterling 2010-10-07 05:11:08

+0

或者我忘了打開二進制模式:) – Setheron 2010-10-07 17:31:45

回答

3

嘗試將mechanize標誌更改爲不尊重robots.txt。另外,還要考慮改變用戶代理HTTP標頭:

>>> import mechanize 
>>> br = mechanize.Browser() 
>>> br.set_handle_robots(False) 
>>> br.addheaders = [('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)')] 

Web服務器現在將像對待你,你正在運行MS Internet Explorer 6中,而不是機器人。即使他們使用robots.txt限制了您的機器人,您的機器人仍會繼續工作,直到它被阻止。

>>> br.open('http://en.wikipedia.org/w/index.php?title=Mike_tyson') 
<response_seek_wrapper at 0x... whose wrapped object = <closeable_response at 0x... whose fp = <socket._fileobject object at 0x...>>> #doctest: +ELLIPSIS 
+0

我刮的網站甚至沒有robots.txt;) – Setheron 2010-10-07 05:09:38

0

好的,所以這是真的搞砸了。我最初正在研究替代方法,因爲我試圖刮取一個Mp3。我正在設法成功下載mp3,但它全部被破壞。

原來,這與我在Windows或我目前的Python版本中下載它有某種關係。我在我的Ubuntu發行版上測試了代碼,並且下載的mp3文件完全沒問題....

所以我只用了簡單的urllib2.openurl,它工作的很完美!

我想知道爲什麼在Windows上下載會損壞mp3?