You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

手动可保存图片但脚本无法爬取?原因与解决办法咨询

Yupoo图片下载错误:占位图替代真实图片的问题解决

你遇到的这个问题其实是Yupoo网站的反爬检测机制在搞鬼,我来帮你拆解原因和解决办法:

问题原因

Yupoo这类图片分享网站会识别请求的User-Agent(请求头里的客户端标识):

  • 你用urllib.request.urlretrieve发起请求时,默认的User-Agent是类似Python-urllib/3.10这类标识,网站一眼就能看出这是程序发起的请求,就会返回占位图而非真实图片。
  • 而手动右键保存图片时,是浏览器发起的请求,浏览器会自动带上正常的User-Agent(比如Chrome的Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...),网站识别为合法的浏览器访问,就会返回真实图片。

解决方法

只需要给请求添加模拟浏览器的User-Agent请求头,让网站误以为是浏览器发起的访问即可。修改你的脚本如下:

import urllib.request

def Save_Image(url, file_path, file_name):
    full_path = file_path + file_name + '.jpg'
    # 模拟Chrome浏览器的User-Agent,你也可以换成Firefox等其他浏览器的标识
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
    }
    # 创建带请求头的Request对象
    req = urllib.request.Request(url, headers=headers)
    # 发起请求并写入文件
    with urllib.request.urlopen(req) as response, open(full_path, 'wb') as out_file:
        out_file.write(response.read())

url = 'http://photo.yupoo.com/evakicks/05269e07/7bd1fc86.png'
file_name = 'Image1'
# 请确保脚本同目录下已创建imageFolder文件夹
Save_Image(url, 'imageFolder/', file_name)

补充说明

  • 你可以根据自己常用的浏览器,替换成对应的User-Agent(比如在浏览器的开发者工具里查看Network请求的Request Headers就能找到)。
  • 这种添加请求头模拟浏览器的方式,是应对简单反爬机制的常用手段,很多图片、内容网站都会用类似的检测逻辑。

内容的提问来源于stack exchange,提问作者NapoleonB

火山引擎 最新活动