本文最后更新于128 天前,其中的信息可能已经过时,如有错误请发送邮件到2778680280@qq.com
一、教程说明
本文解决 Pixiv 爬取中第三方库pixivtools版本兼容、Cookie 失效、接口报错等问题,采用纯原生 Python 代码实现「读取 Cookie + 爬取用户所有作品」,全程可控,适合新手直接复用,初开通过20几次大模型演化出来的最终版本。
二、准备工作
1. 环境要求
- Python 3.7+(推荐 3.9/3.10)
- 安装必备依赖:bash
运行
pip install requests --upgrade
2. 获取 Pixiv 有效 Cookie(核心!)
Cookie 是登录 Pixiv 的凭证,过期 / 错误会导致爬取失败,步骤如下:
- 打开浏览器(Chrome/Edge/Firefox),登录 Pixiv 官网:https://www.pixiv.net/
- 按
F12打开开发者工具 → 切换到「Network(网络)」标签 - 刷新 Pixiv 页面,在请求列表中点击任意以
pixiv.net开头的请求(如profile/all) - 找到「Request Headers(请求头)」→ 复制
Cookie行的完整字符串(从第一个=到最后一个字符)- 懒人捷径:F12 → 「Application(应用)」→ 「Cookie」→ 「https://www.pixiv.net」→ 复制所有 Cookie 拼接成字符串
3. 梯子配置(国内必看)
- 确保梯子正常运行,记录代理端口(如 Clash 默认
7890,V2Ray 默认1080)
三、完整代码(直接复制可用)
创建pixiv_crawl.py文件,粘贴以下代码:
python
运行
import requests
import os
import time
# ===================== 配置区(仅需改这3处)=====================
# 1. 替换成你的完整Cookie字符串
COOKIE = "这里粘贴你复制的完整Cookie"
# 2. 替换成你的梯子代理端口(不用梯子则改为空字符串"")
PROXY = "127.0.0.1:7890"
# 3. 要爬取的Pixiv用户ID
TARGET_USER_ID = 70050825
# ===============================================================
# 请求头配置(适配Pixiv新版接口)
HEADERS = {
"Cookie": COOKIE,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Referer": "https://www.pixiv.net/",
"Accept": "application/json, text/plain, */*",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Origin": "https://www.pixiv.net",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-origin"
}
# 代理配置
PROXIES = {"http": f"http://{PROXY}", "https": f"http://{PROXY}"} if PROXY else {}
# 图片保存目录(自动创建)
SAVE_DIR = "./pixiv_imgs"
os.makedirs(SAVE_DIR, exist_ok=True)
def check_cookie_validity():
"""验证Cookie是否有效"""
print("🔍 正在验证Cookie有效性...")
url = f"https://www.pixiv.net/ajax/user/{TARGET_USER_ID}/profile/all?lang=zh"
try:
resp = requests.get(url, headers=HEADERS, proxies=PROXIES, timeout=15)
if resp.status_code == 200:
print("✅ Cookie有效,登录成功!")
return True
elif resp.status_code == 401:
print("❌ Cookie失效(401未授权),请重新复制最新Cookie!")
return False
else:
print(f"⚠️ 验证状态码{resp.status_code},尝试继续爬取...")
return True
except Exception as e:
print(f"❌ Cookie验证失败:{str(e)[:50]}...")
return False
def download_single_artwork(artwork_id):
"""下载单个作品的所有图片"""
try:
# 获取作品详情
url = f"https://www.pixiv.net/ajax/illust/{artwork_id}?lang=zh"
resp = requests.get(url, headers=HEADERS, proxies=PROXIES, timeout=15)
resp.raise_for_status()
data = resp.json()["body"]
# 处理单页/多页作品
if "pages" in data:
pages = data["pages"]
else:
pages = [{"urls": {"original": data["urls"]["original"]}}]
# 逐个下载图片
for idx, page in enumerate(pages):
img_url = page["urls"]["original"]
img_name = f"{artwork_id}_{idx+1}.jpg"
img_path = os.path.join(SAVE_DIR, img_name)
# 跳过已下载的图片
if os.path.exists(img_path):
print(f"📌 已存在,跳过:{img_name}")
continue
# 下载图片(添加专属Referer防403)
time.sleep(1) # 延时1秒,避免触发反爬
img_headers = HEADERS.copy()
img_headers["Referer"] = f"https://www.pixiv.net/artworks/{artwork_id}"
img_resp = requests.get(img_url, headers=img_headers, proxies=PROXIES, timeout=20)
# 保存图片
with open(img_path, "wb") as f:
f.write(img_resp.content)
print(f"✅ 下载成功:{img_name}")
except Exception as e:
print(f"❌ 作品{artwork_id}下载失败:{str(e)[:50]}...")
def crawl_user_all_artworks():
"""爬取指定用户的所有插画+漫画作品"""
# 先验证Cookie
if not check_cookie_validity():
return
print(f"\n🚀 开始爬取用户{TARGET_USER_ID}的所有作品...")
try:
# 获取用户所有作品ID
url = f"https://www.pixiv.net/ajax/user/{TARGET_USER_ID}/profile/all?lang=zh"
resp = requests.get(url, headers=HEADERS, proxies=PROXIES, timeout=15)
resp.raise_for_status()
data = resp.json()["body"]
# 提取插画和漫画ID
illust_ids = list(data.get("illusts", {}).keys()) # 插画ID
manga_ids = list(data.get("mangas", {}).keys()) # 漫画ID
all_artwork_ids = illust_ids + manga_ids
if not all_artwork_ids:
print(f"❌ 未找到用户{TARGET_USER_ID}的任何作品")
return
# 批量下载作品
print(f"📊 共找到{len(all_artwork_ids)}个作品,开始下载...\n")
for artwork_id in all_artwork_ids:
download_single_artwork(artwork_id)
# 爬取完成提示
print(f"\n🎉 爬取完成!所有图片保存在:{os.path.abspath(SAVE_DIR)}")
except Exception as e:
print(f"\n❌ 爬取用户作品失败:{str(e)[:100]}...")
if __name__ == "__main__":
# 执行主爬取逻辑
crawl_user_all_artworks()
四、使用步骤(无脑操作)
步骤 1:修改配置区
打开代码,仅需改 3 处配置(代码中已标注):
COOKIE:粘贴你从浏览器复制的 Pixiv 完整 Cookie;PROXY:填写你的梯子代理端口(如 Clash 填127.0.0.1:7890,不用梯子填"");TARGET_USER_ID:替换成你要爬取的 Pixiv 用户 ID(如示例的70050825)。
步骤 2:运行代码
- 打开 CMD(命令提示符),进入代码所在文件夹:bash
运行
cd C:\Users\27786\Desktop\pixiv爬取
执行代码:
bash
运行
py pixiv_crawl.py
步骤 3:查看结果
- 爬取的图片会自动保存在代码同目录的
pixiv_imgs文件夹中; - 已下载的图片会跳过,重复运行不会重复下载。
五、常见问题解决
问题 1:Cookie 失效(提示 401)
- 原因:Pixiv 的 Cookie 有效期短(几十分钟到几小时);
- 解决:重新登录 Pixiv,按「准备工作 2」步骤复制最新 Cookie 替换代码中的
COOKIE。
问题 2:代理连接失败(超时 / 无法访问)
- 原因:梯子未开启、代理端口填错;
- 解决:
- 确认梯子正常运行;
- 核对
PROXY端口(Clash 默认 7890,V2Ray 默认 1080,Shadowrocket 默认 1087 等); - 国内用户必须用代理访问 Pixiv,否则无法连接。
问题 3:图片下载失败(提示 403)
- 原因:请求头缺少作品专属 Referer;
- 解决:代码已内置 Referer 适配,无需额外操作,确保梯子正常即可。
问题 4:爬取速度慢
- 原因:代码内置 1 秒延时防反爬;
- 优化:如需提速,可将
time.sleep(1)改为time.sleep(0.5)(不建议低于 0.5 秒,易被封 IP)。
六、注意事项
- 爬取频率:建议单次爬取不超过 100 个作品,避免触发 Pixiv 反爬机制;
- Cookie 安全:不要将包含 Cookie 的代码分享给他人,避免账号被盗;
- 合规性:仅用于个人学习,请勿商用或爬取违规内容。
七、总结
本教程抛弃了坑人的第三方库pixivtools,采用纯原生requests实现爬取,核心优势:
- 无版本兼容问题,Python3.7 + 均可运行;
- 自带 Cookie 验证、文件去重、反爬延时;
- 报错信息清晰,新手可快速定位问题;
- 保留「配置化」设计,仅需改 3 处即可复用。
按操作,可稳定爬取 Pixiv 指定用户的所有插画和漫画作品,或者直接爬取某一具体作品,图片自动保存到本地,全程无需复杂配置,还不快点个赞?









