使用Selenium从Pixiv下载图片时遭遇403错误的解决求助
解决Pixiv图片下载403错误的方案
我之前也碰到过一模一样的问题,Pixiv的反爬机制会直接拦截单纯访问图片源链接的请求——光加User-Agent根本不够,它还会校验请求的Referer来源和登录状态Cookie,这俩才是破解403的关键!
问题根源
Pixiv的图片服务器i.pximg.net会验证请求是否来自官方的作品页面:直接访问图片链接时,请求头里没有携带对应作品页的Referer,服务器会判定为非法爬虫请求,返回403。另外,哪怕是公开作品,未登录状态下的请求也可能被限流拦截。
具体解决方案
下面给你一套可落地的代码流程,结合Selenium获取登录Cookie,再用requests带着合规请求头下载图片:
1. 用Selenium登录Pixiv并保存登录Cookie
from selenium import webdriver import requests import time # 初始化Chrome浏览器,打开Pixiv登录页 driver = webdriver.Chrome() driver.get("https://accounts.pixiv.net/login") # 手动完成登录(Pixiv有验证码,自动登录容易触发验证,手动更稳妥) input("请在浏览器里完成登录,登录后按回车继续...") # 把浏览器的Cookie转换成requests能用的字典格式 cookies = driver.get_cookies() cookie_dict = {cookie['name']: cookie['value'] for cookie in cookies} # 关闭浏览器 driver.quit()
2. 构造合规请求头,下载目标图片
# 图片所属的作品页面URL(必须和图片一一对应,不能随便填) work_page_url = "https://www.pixiv.net/en/artworks/93284987" # 你获取到的图片源链接 img_src = "https://i.pximg.net/img-original/img/2021/10/07/19/41/28/93284987_p0.jpg" # 构造请求头,User-Agent用主流浏览器的标识,Referer必须是作品页面 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36", "Referer": work_page_url } # 发送请求并保存图片 response = requests.get(img_src, headers=headers, cookies=cookie_dict) if response.status_code == 200: with open("pixiv_artwork.jpg", "wb") as f: f.write(response.content) print("图片下载成功!") else: print(f"下载失败,状态码:{response.status_code}")
批量下载的优化提示
- 用
requests.Session()维持会话,不用每次请求都重复传Cookie和Headers,提升效率。 - 每处理完一个请求后,加1-2秒的延迟(
time.sleep(1)),避免短时间内大量请求触发Pixiv的IP封禁。 - 循环处理时,记得给每张图片匹配对应的作品页面Referer,不能复用同一个Referer。
内容的提问来源于stack exchange,提问作者bringand1




