【原神】各角色Pixiv涩图统计(一). 最多的是谁? R18涩图谁最多?

2023-05-16

统计的结果请见第一篇文章.

代码已经开源至GitHub

本文下面所有的爬虫项目都有详细的配套教程以及源码,都已经打包好上传到百度云了,链接在文章结尾处!

扫码此处领取大家自行获取即可~~~

讲真, 这个应该是我做过的最难受的爬虫项目. 一共搞了两天半, 嘛都干不了哎哟.

因为Pixiv的反爬机制, 好端端的代码硬生生地堆成了屎山.

首先, 我们来确定一下我们的统计逻辑.

要统计各角色的涩图数量, 可以直接在Pixiv搜索角色的名字. 但是对于爬虫来说, 或许要用如下链接.

img

Pixiv中主要使用的语言有, 简体中文, 繁体中文, 日文, 英文, 韩文五种. 虽然也有些创作者会采用俄语, 但是考虑到原神并没有俄语版本, 因此我们不统计俄语的.

同时, 我们注意到, 对于每一个角色的名字来说, 有些名字搜索出来的并不一定就是和和原神相关的, 这种我们自然不能让其被统计进去.

img

Lumine tag下 也有和原神 荧 不相关的作品

OK, 那么总结一下, 我们的逻辑就是:

  1. 先获取到原神各角色各语言的名字, 比如说凯亚, Kaeya, 凱亞, ガイア, 케이아.
  2. 然后, 再在Pixiv上根据这些名字爬取所有作品,
  3. 爬取到的作品中, 并不是全部都和原神相关, 因此, 我们创建一个list, 要求该作品必须出现这个list的一个元素, 或者其他原神角色的名字(任意语言都行), 才能被判断为属于该原神角色的涩图. 具体的list会在后面给出
  4. 统计上述作品中不重复的部分.

用到的package如下所示.

img

首先, 我们得获取原神各角色名字, 这个在原神官网就能爬取到.

img

但是, 在实际爬取过程中, 这个网站切换语言经常失败或者自动根据IP地址跳转.

甚至还可以返回一半英语一半日文的内容. 因此我手动保存了这个网站的个语言的源代码,

img

简体中文的名字在原神国内官网就能找到, 和国际官网类似, 但是注意, 一定注意.

国内官网刻晴和七七的顺序有误, 需要在保存的源代码中调整.

img

繁体中文

img

简体中文(顺序错误)

之后再用正则识别出各角色的各语言名字.

img

注意为了数据的准确性, 可以对一些稻妻角色姓名做一些调整, 增加一些搜索内容

img

img

注意, 原神官网上没有荧和空, 需要特殊处理

img

关于判断一个作品是不是和该原神角色相关, 我们的逻辑是如果在该作品中出现了其他原神角色的名字, 或者除本语言外的本角色名字, 或者出现一个在下面list中列出的元素, 就认为其和该原神角色相关.

注意忽略大小写.

judgeTag=[‘原神’,‘Genshin’,‘Impact’,‘米哈游’,‘米哈遊’,‘HoYoLAB’,‘원신’,‘HOYOVERSE’,‘miHoYo’,‘蒙德’,‘璃月’,‘须弥’,‘稻妻’,‘枫丹’,‘纳塔’,‘至冬’,‘提瓦特’,‘Mondstadt’,‘Liyue’,‘Inazuma’,‘Sumeru’,‘Fontaine’,‘Natlan’,‘Snezhnaya’,‘爷’,‘派蒙’,‘Paimon’,‘旅行者’,‘履刑者’,‘屑’,‘森林书’,‘兰纳罗’,‘双子’,‘愚人众’,‘Traveller’,‘Traveler’,‘雷音权现’,‘七星’,‘水’,‘火’,‘岩’,‘冰’,‘风’,‘雷’,‘草’,‘タル蛍’,‘雷电影’,‘雷电真’,‘雷電影’,‘黄金梦乡’,‘深渊’,‘Abyss’,‘七圣召唤’,‘Twins’,‘崩坏’,‘星穹铁道’,‘爱莉希雅’,‘Elysia’,‘女仆’,‘旅人’,‘Travel’,‘公子’,‘捷德’,‘风花节’,‘海灯节’,‘纠缠’,‘Wish’,‘Pull’,‘海祈岛’,‘珊瑚宫’,‘渊下宫’,‘尘歌’,‘萍姥姥’,‘龙脊雪山’,‘苍风高地’,‘风啸山坡’,‘明冠山地’,‘坠星山谷’,‘珉林’,‘璃沙郊’,‘云来海’,‘碧水原’,‘甜甜花’,‘层岩巨渊’,‘Status’,‘天理’,‘琪亚娜’,‘食岩之罚’,‘仙跳墙’,‘佛跳墙’,‘野菇鸡肉串’,‘珊瑚宫’,‘心海’,‘Pyro’,‘Cyro’,‘Hydro’,‘Nature’,‘Anemo’,‘Geo’,‘Dendro’,‘Electro’,‘Swirl’,‘原石’,‘Primogem’,‘Jade’,‘God’,‘Fate’,‘Intertwined’,‘纠缠之缘’,‘Serenitea’,‘Artifact’,‘圣遗物’,‘博士’,‘doctor’,‘同人’]

之后就是重头戏, 爬取Pixiv.

Pixiv不登录不给爬, 但是我们也得学会变通一点. 我们不要硬钢那个登录接口, 我们采取迂回的办法.

img

我们直接把我们登录后在浏览器看到的cookie复制下来, 写进header里面.

(至于为什么我用了好几个cookie, 我后面会讲)

img

有了cookie之后, 我们再爬取tags的时候才会返回正常内容.

不过注意, 内容并不是在网页HTML中返回的, 而是需要请求另外一个页面, 才会返回给我们有意义的内容.

img

其中, 红圈圈出来的, 就表示需要请求的 tag 和 第几页.

具体来说, 我们就是要用装有cookie的header, 生成这个链接, 然后再请求, 这样才能取到有实际意义的内容.

这个链接很简单, 就用如下字符串拼接的方式生成.

img

requestURL='https://www.pixiv.net/ajax/search/artworks/'+name+'?word='+name+'&order=date_d&mode=all&p='+str(page)+'&s_mode=s_tag_full&type=all&lang=zh&version=1bb9c95cd9cbc108a16ddf9fea198f3210ac5053'

img

之后还需要load一下json

之后再用正则筛选出有用的信息

img

不过注意, Pixiv脾气并不是很好. 短时间请求的数量太多, 会返回空内容, 所以需要判断一下内容是不是为空.

img

同时, 如果那个tag下面就真的没有任何内容, 返回的也是空值.

img

另外, 如果网络不好也可能收到空内容或者内容不全.

最后, 有时候网络是正常的, Pixiv也正常处理响应, 但是返回的内容就是不全, 或者返回了其他不完全相关的内容.

最后的最后, 当已经爬取完所有内容后, 再让 page+=1 爬取下一页的内容. Pixiv并不会返回404, 而是也返回空值.

还得注意, 返回的内容是有重复的, 这个也要考虑到.

如果自己写代码的话上面的问题都需要考虑, 我的代码中已经考虑并且测试通过了.

前面提到过, Pixiv爬取非常慢, 因此我们用多线程.

img

但是多线程就很容易被禁cookie, 因此我们搞多个cookie, 并且设计一套算法来决定到底用哪个cookie.

如果有一次请求不成功, 这个cookie的sleep time就加20秒.

img

换cookie的时候, 要睡眠对应cookie的睡眠时间

img

美成功处理完6个角色(所有语言的名字), 就要把睡眠时间重置. 免得最后退化成单cookie模式.

img

至于main.py跑完后的结果可视化, 那个讲起来太长了, 并且全都是matplotlib画图, 有问题的在评论区问我吧.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【原神】各角色Pixiv涩图统计(一). 最多的是谁? R18涩图谁最多? 的相关文章

  • 嵌入式项目管理学习——001重点明确和心态转换

    相信做嵌入式的码哥们在参与一定数量的产品设计和生产之后 xff0c 都会发现一个问题 xff0c 如果没有一个负责的产品经理 xff0c 就会陷入到产品延期 沟通缺失 目标不清晰 需求不明确等等的问题 xff0c 我目前也是达到了这样一个状
  • 正点原子MiniFly V1.2学习笔记六---stabilizerTask

    第9个任务 xff0c 优先级5 xTaskCreate stabilizerTask 34 STABILIZER 34 450 NULL 5 NULL 一 任务函数 使用绝对延时 xff0c 周期执行任务 二 传感器数据是怎么传到这个任务
  • 正点原子MiniFly V1.2学习笔记七---configParamTask

    第6个任务 xff0c 优先级1 xff0c 最低优先级 配置参数任务 xTaskCreate configParamTask 34 CONFIG TASK 34 150 NULL 1 NULL 一 全局参数configParam 1 参数
  • C++码农要读的经典

    刚大四 xff0c 还在忙着找工作 xff0c 读过的书不是很多 xff0c 还有一些好书在读 xff0c 还有一些书将来必读 C语言程序设计 谭浩强版本 这个版本一致被人说误导子弟 xff0c 当然还有很多人推崇 我觉得这本书不是什么好书
  • 解读gazebo_ros_control gazebo_ros

    本篇的目的是想解读gazebo ros control 以及 gazebo ros 因为gazebo本身是独立于ros的 通过教程Intermediate Control plugin 以及教程 Category Write a plugi
  • vtaskstartscheduler(); //开启任务调度语句不执行

    项目场景 xff1a FreeRTOS实时嵌入式操作系统开发 基于stm32 第一章移植代码 问题描述 xff1a 任务调度器执行到vtaskstartscheduler 开启任务调度语句不执行 span class token keywo
  • python3中定义类变量,并使用类函数修改类变量的值

    定义类变量的方式有两种 1 在 init 中定义self elements 其中self elements是类变量名 a是传入Difference类的参数名 xff0c 这里的 init 作用是定义了类变量名 xff0c 将外部参数a传给类
  • printf函数的内涵以及造成的严重内存问题

    问题的引出 xff1a 在某型号的核心网络交换机设备中 xff0c 为调试方便 xff0c 实现了一个把内存内容从终端打印的功能 xff0c 也就是dump memory xff0c 屏幕的左边显示十六进制 xff0c 右边以ASCII形式
  • 关于docker那点事儿——Dockerfile编写

    Dockerfile编写 前言一 Dockerfile创建镜像二 Dockerfile常用指令三 示例1 Dockerfile构建nginx镜像2 Dockerfile构建微服务 四 CMD与ENTRYPOINT比较 前言 Dockerfi
  • SylixOS信号量(二进制信号量、 计数型信号量、 互斥信号量(简称互斥量)、 读写信号量)

    目录 二进制信号量 互斥信号量 计数器信号量 读写信号量 SylixOS 信号量 多个线程在读写某个共享数据 xff08 全局变量等 xff09 时必须通过某种方法实现共享数据的互斥访问或者同步访问 xff08 例如线程 B 等待线程 A
  • 什么是优先级反转及解决方法

    什么是优先级反转 优先级反转 xff0c 是指在使用信号量时 xff0c 可能会出现的这样一种不合理的现象 xff0c 即 xff1a 高优先级任务被低优先级任务阻塞 xff0c 导致高优先级任务迟迟得不到调度 但其他中等优先级的任务却能抢
  • STM32CubeMX在F103上的ADC注入通道配置异常问题

    前言 最近业余时间在搞无刷电机FOC的控制 xff0c 其中有一部分是关于流过电机三相绕组电流采集的 xff0c 需要用到STM32内置的ADC xff0c 核心是需要使用注入通道以确保ADC数据采集的实时性 xff0c 但是我在STM32
  • C++ static静态成员变量用法

    C 43 43 static静态成员变量用法 参考网址 xff1a 1 http c biancheng net cpp biancheng view 209 html 2 https www runoob com cplusplus cp
  • 解决AndroidStudio 控制台编译输出中文乱码,黑方块+问号之类的

    100 有效 解决AndroidStudio 控制台编译输出中文乱码 xff08 黑色方框问号 xff09 xff0c 亲测解决 xff01 xff08 转载 xff09 Pdx 666的博客 CSDN博客 背景在AndroidStudio
  • sphinx安装及简单使用

    sphinx安装及简单使用 如果你要编写技术文档 可以用 reStructuredText 或 Markdown 格式编辑文件 xff0c 然后使用 Sphinx 工具转换成 html PDF ePub等格式 xff0c 或者托管到 git
  • cmake之CMakelist.txt的使用

    文章目录 常用命令1 指定 cmake 的最小版本2 打印信息2 1 打印普通信息2 2 打印告警2 3 打印错误 3 项目名称4 设置变量5 查找指定的库文件6 设置包含的目录7 设置链接库搜索目录8 指定编译包含的源文件8 1 明确指定
  • python爬虫 记录一次爬取淘宝的过程

    淘宝可以说是一个检验爬虫技术是否过关的最强关卡了 xff0c 下面来打破它吧 淘宝的所有操作差不多都是在登录的状态下进行的 xff0c 这时候想要对淘宝进行请求获取信息就必须在登录的状态下进行了 方式一 xff1a xff08 seleni
  • 问题tensorflow.python.framework.errors_impl.ResourceExhaustedError:OOM

    tensorflow python framework errors impl ResourceExhaustedError 2 root error s found 0 Resource exhausted OOM when alloca
  • ROS安装超详细保姆级教程

    1 版本选择 ROS与Ubuntu版本是有着对应关系的 xff0c 其中Ubuntu1604 43 ROS Kinetic xff1b Ubuntu1804 43 ROS Melodic xff1b Ubuntu2004 43 ROS No
  • 2021年9月22号,实战烧写树莓派sd卡的系统

    1 下载格式化u盘的软件 xff0c 软件地址 xff0c 阿里云盘地址 xff1a https www aliyundrive com s ux2re9FFxd2 2 将有sd卡的读写盘插入电脑接口 3 打开软件 xff0c 点击格式化即

随机推荐

  • 工作流与BPM的区别

    一 工作流是什么 xff1f 根据国际工作流管理联盟 Workflow Management Coalition xff0c WFMC 的定义 xff0c 工作流就是 一类能够完全或者部分自动执行的经营过程 xff0c 它根据一系列过程规则
  • 被遗忘的软件产品形态

    从2010年以后 xff0c 很多公司开发的软件产品 xff0c 很少有客户端了 xff0c web2 0之后 xff0c 主流的业务系统基本上都是基于Web去构建业务系统 这几年见到的业务应用系统都是基于Web的构建的 而在To C市场
  • C端产品工作流程

    文章目录 发现需求需求分析用户需求定义产品需求定义构建产品方案收集需求确定产品功能 产品需求分类产品目标分解产品版本规划需求评审产品功能设计需求评审确定执行计划测试验收发布上线 发现需求 通过自身的体验发现需求 通过间接的体验发现需求 1
  • STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现

    通过STM32cubeMX将STM32F767 43 LAN8720 43 LwIP 43 FreeRTOS的以太网实现 本文使用了正点原子的阿波罗开发板 xff0c 接下来我将粗略的对STM32F767通过STM32cubeMX进行以太网
  • 数据产品经理有哪些

    文章目录 数据分析产品经理数据挖掘产品经理策略产品经理数据工程类产品 首先希望大家能重新认识经理这份工作 xff1a 大数据产品经理并不一定要数学能力强或者编程能力强 xff0c 只要你有用数据思考的方式 xff0c 有相信数据的信念 xf
  • 产品经理必备的20个常用工具

    原型设计工具 xff1a Axure 墨刀 思维导图工具 xff1a Xmind MindManager 流程图绘制工具 xff1a Viso ProcessOn 数据处理与分析工具 xff1a Excel Tableau 问卷调研工具 x
  • Hibernate根据实体类自动生成表的方法

    文章目录 第一种方法第二种方法参考 第一种方法 这种方法需要配置 hibernate cfg xml 的属性 hibernate hbm2ddl auto xff0c 该属性值的具体说明如下 xff1a 值说明update实体对应的表如果不
  • 微信账户如何解除对第三方应用的授权

    参考文章 xff1a https baijiahao baidu com s id 61 1754354599985802723 amp wfr 61 spider amp for 61 pc amp searchword 61 E5 B0
  • 进程间通信

    现在的嵌入式系统往往有并发的特征 xff0c 就像多任务操作系统的多进程一样 xff0c 其内核会提供几种机制处理任务间通信 xff0c 本文对四种常见通信模式进行了分析 xff0c 并对其各自的优劣作较细致的比较 目前 xff0c 越来越
  • HTTP请求返回状态码的不同含义

    用户通过 HTTP 访问一台正在运行Internet信息服务的服务器上的内容时 xff0c 会返回一个表示该请求的状态的数字代码 状态代码可以指明具体请求是否已成功 xff0c 还可以揭示请求失败的确切原因 1 信息提示 这些状态代码表示临
  • 异常检测及其分布集成

    异常检测算法种类繁多 xff0c 包括聚类 xff0c 树 xff0c 统计分布 xff0c 机器学习 xff0c 深度学习等多种形式 xff0c 下面对一些常见问题进行了自己的总结 xff1a 1 如何选型 xff1f 主要看算法原理和数
  • 关于FreeRTOS 任务运行中卡死在临界区vPortExitCritical()

    FreeRTOS创建任务正常运行 xff0c 偶尔出现任务卡死状态 xff0c 通过在线调试 xff0c 程序卡在vPortExitCritical 函数中 xff0c 在IAR Call Stack中观察到各任务都可能回调该接口 span
  • Ardupilot添加自定义日志(AP_LOG)

    1 在libraries AP Logger LogStructure h中添加自定义的结构体 span class token keyword struct span span class token class name PACKED
  • Ardupilot 编译Bootloader

    1 清理之前的编译中间文件 xff0c 一定要清理一下 xff0c 能避免很多奇怪的问题 span class token punctuation span span class token operator span waf distcl
  • 基于STM32CUBE的LWIP+FREERTOS+Socket构成的TCP服务器

    本实验基于STM32F767制作 一 实验目的 本实验主要目的是通过Socket网络编程方法完成通过以太网控制两个LED的亮灭的 xff0c 同理可用到继电器上控制其它高电压设备 二 实验步骤 1 首先先生成一个带有LWIP和FreeRTO
  • PX4 ---- Mixer

    文章目录 Mixer 混合控制 作用输入输出装载混控文件MAVROS代码解析总结示例MAINAUX Mixer 混合控制 作用 经过位置控制和姿态控制后 xff0c 控制量通过 actuator controls发布 xff0c 其中 co
  • PX4 ---- Indoor Flight

    文章目录 室内飞行ROS amp PX4Pose Data 飞机配置MAVROS 基于工训赛 VIO 飞行总结 室内飞行 ROS amp PX4 Pose Data 飞机配置 VIO 参考此处 xff0c 采用 T265 配置 相机与飞控机
  • PX4 -- EKF2

    文章目录 EKF2参数高度估计Range Finder滤波 单变量更新单变量更新对多变量的影响 EKF2 参数 EKF2 中有一类 GATE 参数 当测量值在 VAR GATE 范围内才会更新值 高度估计 四种高度控制方法 xff1a 气压
  • opencv4以上版本报错:CV_LOAD_IMAGE_COLOR和CV_BGR2HSV和CV_CAP_PROP_FRAME_WIDTH

    报错关于 xff1a CV LOAD IMAGE COLOR xff0c 加入头文件 span class token preprocessor property include span span class token string 3
  • 【原神】各角色Pixiv涩图统计(一). 最多的是谁? R18涩图谁最多?

    统计的结果请见第一篇文章 代码已经开源至GitHub 本文下面所有的爬虫项目都有详细的配套教程以及源码 xff0c 都已经打包好上传到百度云了 xff0c 链接在文章结尾处 xff01 扫码此处领取大家自行获取即可 讲真 这个应该是我做过的