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