初开的Pixiv 图片爬虫(超好用,推荐星级999)
本文最后更新于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 的凭证,过期 / 错误会导致爬取失败,步骤如下:

  1. 打开浏览器(Chrome/Edge/Firefox),登录 Pixiv 官网:https://www.pixiv.net/
  2. F12打开开发者工具 → 切换到「Network(网络)」标签
  3. 刷新 Pixiv 页面,在请求列表中点击任意以pixiv.net开头的请求(如profile/all
  4. 找到「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 处配置(代码中已标注):

  1. COOKIE:粘贴你从浏览器复制的 Pixiv 完整 Cookie;
  2. PROXY:填写你的梯子代理端口(如 Clash 填127.0.0.1:7890,不用梯子填"");
  3. TARGET_USER_ID:替换成你要爬取的 Pixiv 用户 ID(如示例的70050825)。

步骤 2:运行代码

  1. 打开 CMD(命令提示符),进入代码所在文件夹:bash

运行

cd C:\Users\27786\Desktop\pixiv爬取

执行代码:

bash

运行

  1. py pixiv_crawl.py

步骤 3:查看结果

  • 爬取的图片会自动保存在代码同目录的pixiv_imgs文件夹中;
  • 已下载的图片会跳过,重复运行不会重复下载。

五、常见问题解决

问题 1:Cookie 失效(提示 401)

  • 原因:Pixiv 的 Cookie 有效期短(几十分钟到几小时);
  • 解决:重新登录 Pixiv,按「准备工作 2」步骤复制最新 Cookie 替换代码中的COOKIE

问题 2:代理连接失败(超时 / 无法访问)

  • 原因:梯子未开启、代理端口填错;
  • 解决:
    1. 确认梯子正常运行;
    2. 核对PROXY端口(Clash 默认 7890,V2Ray 默认 1080,Shadowrocket 默认 1087 等);
    3. 国内用户必须用代理访问 Pixiv,否则无法连接。

问题 3:图片下载失败(提示 403)

  • 原因:请求头缺少作品专属 Referer;
  • 解决:代码已内置 Referer 适配,无需额外操作,确保梯子正常即可。

问题 4:爬取速度慢

  • 原因:代码内置 1 秒延时防反爬;
  • 优化:如需提速,可将time.sleep(1)改为time.sleep(0.5)(不建议低于 0.5 秒,易被封 IP)。

六、注意事项

  1. 爬取频率:建议单次爬取不超过 100 个作品,避免触发 Pixiv 反爬机制;
  2. Cookie 安全:不要将包含 Cookie 的代码分享给他人,避免账号被盗;
  3. 合规性:仅用于个人学习,请勿商用或爬取违规内容。

七、总结

本教程抛弃了坑人的第三方库pixivtools,采用纯原生requests实现爬取,核心优势:

  • 无版本兼容问题,Python3.7 + 均可运行;
  • 自带 Cookie 验证、文件去重、反爬延时;
  • 报错信息清晰,新手可快速定位问题;
  • 保留「配置化」设计,仅需改 3 处即可复用。

按操作,可稳定爬取 Pixiv 指定用户的所有插画和漫画作品,或者直接爬取某一具体作品,图片自动保存到本地,全程无需复杂配置,还不快点个赞?

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇