现状 /前提 /假设
- V 站没有任何一个页面 /接口以不变的排序(分页)展示了所有主题的列表
- 主题页面要么 200,要么 404 了( 404 包括被禁的以及未创建的)
- 主题页面的链接是规则的(数值递增)
我先来,不使用爬虫框架,伪逻辑如下
while(true){
if (first) {
// 比如开 100 个线程获取 1-100 的主题,https://www.v2ex.com/t/1 到 https://www.v2ex.com/t/100
} else {
// part 1
// 对 404 的主题做重试,因为万一程序跑太快了或者 V 站停更 1 个月就会出现 200 的帖子被错误记录为 404
// 比如对 404 的主题重试个 5 天,5 天后还是 404 就大概率是 404 了
// 当然 part1 的逻辑不是最严谨的,还是可能出错
// part2
// 视情况是否获取下 100 条主题。(比如上 100 条都是 404 可能就是程序跑太快了)
}
// 等待 100 线程结束
// 视情况限制循环的间隔时间
}
一遍下来存的主题 ID 连续的,不会有跳跃 /间断
使用爬虫框架
因为既然是框架么,肯定是具有通用性的,那一般都有哪些爬取逻辑?
还是我印象记得 /错误理解 /胡说八道:
- 直接从 https://www.v2ex.com 主站进入
- 在页面找到 V 站链接
- 如果是形如 /t/100 的链接,记录到数据
- 其它 V 站链接,进入第二步
反正就说下:
- 不使用爬虫框架,你会选什么好的爬取逻辑
- or 使用爬虫框架(哪个)以及它的爬取逻辑(/会爬到哪些链接)