从某个链接下载图像需要urllib永远做

时间:2019-07-03 15:19:09

标签: python urllib

我正在尝试从提供的URL列表中下载图像。大多数链接返回可接受的链接或禁止的链接。但是,对于某个链接,我可以通过浏览器访问它,并且在代码尝试下载时不会引发错误。它只是挂断并永远运行。这是urllib,我的代码还是链接本身的问题,有没有解决的办法?

import urllib.request

urllib.request.urlretrieve("http://www.mercedsunstar.com/news/9d6aao/picture82035257/alternates/FREE_640/13330875_1110997995625119_2134033517544198418_n", "test_image.jpg") 

2 个答案:

答案 0 :(得分:3)

该特定站点正在检查浏览器通常发送的User-Agent和其他标头。如果这些都不存在,它将根本不会回答请求。因此,您的代码永不返回。有时会使用此机制来防止图像或其他内容的自动爬网,这可能是您要尝试执行的操作。

在使用build_opener()之前,您可以研究install_opener()的{​​{1}}和urllib方法来创建一个打开实例并修改其addheaders属性。

urlretrieve

之后,您问题中的代码应按原样工作。

import urllib

opener = urllib.request.build_opener()
opener.addheaders = [("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:67.0) Gecko/20100101 Firefox/67.0")]
urllib.request.install_opener(opener)

如果您确实在爬网,我建议您考虑专门设计用于执行此操作的框架,例如Scrapy。它提供了许多方便的功能,与从头开始构建所有内容相比,可能可能更容易实现您要实现的目标。

还应告知他们,出于某种原因可能会采用此机制,并确保您没有侵犯其知识产权。

答案 1 :(得分:0)

此页面检查“ User-Agent”标头以识别Web浏览器并阻止脚本和机器人。 "Python ..."使用类似于import urllib.request req = urllib.request.Request('http://www.mercedsunstar.com/news/9d6aao/picture82035257/alternates/FREE_640/13330875_1110997995625119_2134033517544198418_n') req.add_header('User-Agent', 'Mozilla/5.0 (X11; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0') content = urllib.request.urlopen(req).read() with open("test_image.jpg", 'wb') as f: f.write(content) 的字符串,因此服务器会阻止它。

此代码对我有用

y_train = y_train.reshape((60000, 1))