Skip to content

注意事项

Coder-Sakura edited this page Apr 26, 2022 · 7 revisions

关于Mysql数据库部分


其中包括:默认字符集修改,严格校验模式关闭,mysqld内存占用过高问题。


1.修改默认字符集编码

由于Pixiv的数据中存在emoji表情,强烈建议修改mysql默认编码集为utf8mb4

Mysql 8.0以上默认使用utf8mb4编码

  • my.ini 添加以下内容
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-client-handshake=FALSE  
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
  • 重启数据库

    • Windows

      net stop mysql
      net start mysql

      或手动重启wampphpstudy等集成环境

    • Linux

      service mysql restart

2.关闭严格校验模式 [可选]

MySQL的严格模式,其实是MySQL自身对数据格式、长度、数据类型进行严格校验;如果定义了charvarchar类型的字段,当写入或更新的数据超过了定义的长度也会报错,而在非严格模式下MySQL不会报错。

为了避免出现这种奇怪的问题。其实是pixiv插画数据中的标题title、标签tag太多或太长导致在严格模式下出错。 这里建议关闭严格校验模式

关于获取登录账号的Cookie


  1. PixiC运行之前,不能启动Chrome; 首次运行PixiC时会打开Chrome之后关闭,期间不要操作Chrome (之后操作Chrome无影响)


  2. 获取cookie之后,Chrome上的Pixiv账号不要退出


  3. 根据网络与代理节点情况对CW (关注画师爬虫) 与BM (收藏作品爬虫) 的线程数进行调整;

    • 网络状况较差则线程数调低,比如4 (建议保持默认设置 -- 8)
    • 不建议增加线程数和改动默认线程数,以免对Pixiv站点正常业务进行影响。

  4. 关于出现网络错误/代理无效的问题。

    • 首先查看代理软件是否能正常代理 (如访问google)
    • 其次使用Chrome打开Pixiv,查看账号是否有登录 (无登录则在Chrome上登录,之后设置COOKIE_UPDATE_ENABLED=True进行cookie更新)
    • 如果还是解决不了,记得截图报错信息和提供config文件,反馈或提issue给我

安装DBUtils成功,却无法导入


报错:ModuleNotFoundError: No module named 'DBUtils'

环境

  • python 3.7.6
  • DBUtils 2.0.0

解决方案

# 卸载原有版本的DBUtils
pip uninstall DBUtils
# 安装1.3.0版本的DBUtils
pip install DBUtils==1.3.0

关于作品稀有度划分


通过score和illust_level来进行作品等级的客观划分

  1. score(收藏数/浏览数),通过score来客观评判作品质量好坏

评分等级与区间划分

评分区间 等级
0~0.14 R
0.14~0.26 SR
0.26~0.325 SSR
0.325~∞ UR

数据分析来源:个人pixiv 19954条收藏作品数据(2021.3)——PixiC

以个人pixiv收藏数据和某手游抽卡概率来分析划分评分的各区间

折线图分布

数据分析来源:个人pixiv 19954条收藏作品数据(2021.3)——PixiC

针对浏览量大的作品

通常一个人可以浏览多次作品,而只能收藏一次作品;所以浏览量大的作品一般收藏数都是浏览数的10%

# === 针对浏览量大的热门作品 ===
# 从R(0.14)中寻找SSR,不取边界值
if 20000 < bookmarkCount and score < illust_interval['R']:
    # SSR
    illust_level = illust_level_list[2]

# 从SR(0.26)中寻找UR,不取边界值
if 25000 < bookmarkCount and \
illust_interval['R'] < score < illust_interval['SR']:
    # UR
    illust_level = illust_level_list[3]