爬虫架构详情

当前爬虫架构

  1. circle_status:(一次性)爬取每个tag的status,过滤不存在的tag
  1. circle_list_member:列出每个tag的关注用户
  1. user_update_follow_up:(已无用)关注全站用户
  1. user_list_crawl:爬取每个用户的关注列表
    1. 有bug,需要手动同步user_followings、user_followers表的否则关注列表就不会更新
  1. user_detail:爬取每个用户的detail信息
    1. 持续循环跑
  1. user_timeline_all:爬取每个用户的时间线,得到item
    1. 之前的爬取可能有bug(overlap模式的结尾判定有问题,之前按照如果只返回1个就算结束,但是实际上还是能往后取),所以有一个修复模式,修复好了会有timeline_fixed
    2. 还是overlap模式的结尾判定有问题,有部分用户用activity posttype完全无法接着爬,但是用original posttype还可以接着爬,所以也有修复模式,修复好了会有timeline_fixed2
    3. 重置了timeline_fixed2,重新用original切换+根据uid判断最小since爆破
  1. circle_timeline_all:爬取每个圈子的时间线,得到item
  1. item_hot_reply:爬取每个item的回复列表,但是没有爬楼中楼
  1. group_crawl:根据热度列表爬取group(根本爬不全)
  1. group_detail:(一次性)根据group的id遍历所有的group拿到detail
  1. group_posts_all:拿到每个group的所有回答(存到items里面)
  1. user_timeline_fix:寻找时间线中的gap区域,然后尝试修复
    1. 这是第二轮修复,修复好了会有timeline_fixedmissing
  1. circle_timeline_all_hot:用别的模式爬tag的所有时间线(最新回复、最热门等)
    1. 效果不佳
  1. user_timeline_incremental:增量爬取timeline,存到user的latest_timeline属性里面
  1. video_url_all:用ib.snssdk.com + vid直接获取不过期的视频url
  1. video_info_fix:有些item的detail里video_info是空的,通过item/detail接口重新获取一遍

遇到的各种问题

  • 关注爬取
    • 用户的关注和粉丝接口都非常不稳定,经常不返回东西
    • 但是circle的member接口多请求几次(一般是等待30s)能返回出来东西
  • 大规模关注
    • 我一开始大规模关注了150w人,似乎导致bcy那边数据库的关注关系错乱了,有很多人的关注从一百多一千多掉到了几十
  • item detail的问题
    • item detail的field有多有少,不能直接用go structure map,否则会丢失一部分field
  • user timeline的种种问题
    • since有概率乱跳:突然一下跳过半年等
      • 加入一个fix
    • 连续的相同的since:而since参数会过滤掉所有大于等于对应值的timeline,导致可能会有一部分相同的since因为分页被切断,完全无法获取到
    • 接口问题1:看全部动态的接口(type = activity)有bug,会突然在中间断掉,完全无法继续获取
      • 但是看原创动态的接口(type = original)可以接着向下请求
      • fix2
    • 接口问题2:有可能无论用 type = activity 还是 type = original都取不出来
      • 可以暴力减Since来接着往下获取(uid97661668852)
      • 看起来和动态删除有很大关系
      • 1688000000 ['1658681347'] 1658000000 ['1648605571'] 1650000000 ['1648605571', '1643041876'] 1648000000 ['1643041876'] 1642000000 ['1640317544'] 1640000000 [] 1632000000 ['1629737478'] 1628000000 [] 1624000000 ['1623405411'] 1622000000 [] 1608000000 ['1588382726'] 1588000000 []