爬虫方案设计(三)

爬虫方案设计(三)

仅供个人交流学习使用,禁止转载,严禁商用!!!任何商业用途与本人无关!

本篇的任务是爬取上篇获得的视频底下的评论。

爬取目标:

主要是针对不同的错误进行处理,把不能处理的错误存储在日志中,尽量保证程序发生错误保证不会意外停止,同时爬取速度不会过快,还不会发生遗漏。

一般出现的错误:

  1. 412代码,访问拦截(尝试多次仍然失败,记录到日志)
  2. 接口返回错误代码:12002,信息:评论区已关闭。(记录并跳过)
  3. “连接api:443失败”(重新尝试)
  4. 'NoneType' object is not iterable
  5. 未知的奇奇怪怪的错误。。。

流程图如下:


graph TD start(开始) start --> videos[设置视频id列表] videos --> video[取视频id] --> j{视频id是否为空?} main[连接当天的数据库] --> visit[访问评论查询接口, 默认page_index=1] visit --> j2{结果空?}--yes-->video j2 --no--> j3{评论总数>10000?}--yes-->video j3 --no--> j4{获取的结果是否等于评论总数?} --no--> wait[等待2s] -->visit j4 --yes--> wait1[等待15s] -->com[取评论] --> j5{评论为空?} --no--> visit1[访问子评论查询接口] visit1 --error--> pass[跳过] --> clear visit1 --success--> wait2[等待1s] -->com j5-->yes--> clear[评论去重] --> save[保存所有评论数据到当天的数据库] j --no--> main j --yes--> e(结束) save --success--> delay[等待15s] save --error--> j1{ServerDisconnectedError且是第1次出现?} j1 --yes--> delay1[等待30s] --> main j1 --no--> record[记录错误信息在日志] --> video delay --> video

数据结构(省略了大部分我不关心的关键词)

关键词 说明
rpid 评论id
oid 对应视频id
mid 评论对应用户
parent 父亲评论id
ctime 评论时间

处理策略

  1. 去重,清理重复数据
  2. 清洗缺失值,异常数据
  3. 统计用户数量
  4. 统计每个用户评论数目,筛选掉评论数目少于100的用户

数据集

截至2021.06.03

视频总共430,277,筛选出了24,268个视频,还有很多数据待筛选

评论总共659,196,待筛选

posted @ 2021-06-03 17:40  小肚腩的世界  阅读(56)  评论(0编辑  收藏  举报