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

使用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

火山引擎 最新活动