2010-10-07 100 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?