Python 使用urlretrieve将图像刮为HTML页面

Python 使用urlretrieve将图像刮为HTML页面,python,web-scraping,urllib,Python,Web Scraping,Urllib,我正在尝试使用urllib.urlretrieve进行刮取 >>> import urllib >>> urllib.urlretrieve('http://i9.mangareader.net/one-piece/3/one-piece-1668214.jpg', path) # path was previously defined 此代码成功地将文件保存在给定路径中。但是,当我尝试打开文件时,我得到: Could not load i

我正在尝试使用urllib.urlretrieve进行刮取

>>> import urllib
>>> urllib.urlretrieve('http://i9.mangareader.net/one-piece/3/one-piece-1668214.jpg', 
        path) # path was previously defined
此代码成功地将文件保存在给定路径中。但是,当我尝试打开文件时,我得到:

Could not load image 'imagename.jpg':
    Error interpreting JPEG image file (Not a JPEG file: starts with 0x3c 0x21)
当我在bash终端中执行
文件imagename.jpg
时,我得到
imagefile.jpg:HTML文档,ASCII文本


那么,如何将此图像作为JPEG文件刮取

这是因为托管该映像的服务器的所有者故意阻止从Python的
urllib
进行访问。这就是它处理
请求的原因。您也可以使用纯Python实现这一点,但是您必须给它一个HTTP
User-Agent
头,使它看起来像
urllib
以外的东西。例如:

import urllib2
req = urllib2.Request('http://i9.mangareader.net/one-piece/3/one-piece-1668214.jpg')
req.add_header('User-Agent', 'Feneric Was Here')
resp = urllib2.urlopen(req)
imgdata = resp.read()
with open(path, 'wb') as outfile:
    outfile.write(imgdata)
所以,这是一个多一点参与,但仍然不是太坏


请注意,网站所有者这样做可能是因为一些人受到了虐待。请不要成为他们中的一员!权力越大,责任也越大。

请求
没有问题,顺便说一句:。谢谢,我来试试。你知道为什么这不起作用吗?我是做错了什么,还是误解了urlretrieve的工作原理?谢谢,请求工作得很好。:)虐待的?为什么呢由于过度刮取,服务器上点击过多?如果用户用urllib阻止了访问,为什么他没有对请求做同样的操作?@NJay虽然我无法解释那个特定服务器管理员的动机,但我根据在其他服务器上看到的情况进行了一些猜测。1) 对于流行站点来说,过度的抓取可能是个问题,因为它们通常会为带宽付费(有些人会在短时间内抓取整个站点);2) 一些网站设置了毯子,试图阻止蜘蛛的捕获;3) 一些管理员只是复制“防止滥用”的第三方工具,而不询问他们做了什么,也不了解更大的情况。至于为什么请求没有被阻止,这可能与上面的答案不同。对于1和2,请求的使用可能不如内置的urllib那么多,并且还没有注册为问题。对于3,可能是在编写工具时请求根本不存在。有趣。谢谢!:)