我尝试从以下网址获取图像。
我可以右键单击并另存为,但是当我尝试使用urlretrieve like
import urllib
img_url = 'http://upic.me/i/fj/the_wonderful_mist_once_again_01.jpg'
urllib.urlretrieve( img_url, 'cover.jpg')
我发现它是html而不是.jpg图像,但我不知道为什么。 你能告诉我为什么我的方法不起作用吗?有没有可以模仿右键另存为方法的选项?
该网站可能会实施安全措施来阻止直接抓取,比如检查请求中的用户代理。
以下是如何使用 Python 请求库模拟类似于右键单击并另存为的行为:
import requests
img_url = 'http://upic.me/i/fj/the_wonderful_mist_once_again_01.jpg'
headers = {'User-Agent': 'Mozilla/5.0'} # 设置一个用户代理
response = requests.get(img_url, headers=headers, stream=True)
response.raise_for_status() # 如果请求不成功,则引发异常
with open('cover.jpg', 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
这段代码做的事情如下:
- 导入 requests 库: 它提供了一种更灵活的方式来处理 HTTP 请求,而不是 urllib。
- 设置一个用户代理: 通过在请求头中包含一个用户代理,我们可以让网站认为请求来自于一个真实的浏览器。
-
使用流式传输下载图像:
stream=True
参数确保我们不会将整个图像一次性加载到内存中,这对大文件很有帮助。 -
将图像保存到文件:
iter_content()
方法允许我们以块的形式读取响应内容,然后我们将其写入文件。
注意:
抓取网站时请务必尊重其
robots.txt
文件和服务条款。