网上那些爬虫框架都是怎么个爬取逻辑?比如爬一下 V 站的所有主题

2019-06-11 22:50:59 +08:00
 c4f36e5766583218

现状 /前提 /假设

  1. V 站没有任何一个页面 /接口以不变的排序(分页)展示了所有主题的列表
  2. 主题页面要么 200,要么 404 了( 404 包括被禁的以及未创建的)
  3. 主题页面的链接是规则的(数值递增)

我先来,不使用爬虫框架,伪逻辑如下

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 连续的,不会有跳跃 /间断

使用爬虫框架

因为既然是框架么,肯定是具有通用性的,那一般都有哪些爬取逻辑?

还是我印象记得 /错误理解 /胡说八道:

  1. 直接从 https://www.v2ex.com 主站进入
  2. 在页面找到 V 站链接
    • 如果是形如 /t/100 的链接,记录到数据
    • 其它 V 站链接,进入第二步

反正就说下:

1335 次点击
所在节点    问与答
4 条回复
c4f36e5766583218
2019-06-11 23:02:27 +08:00
我真的没有想爬 V 站,只是技术交流,举例而已。不要被 ban...
c4f36e5766583218
2019-06-12 08:13:39 +08:00
@Livid 被 ban 了?为什么这主题没出现在 https://www.v2ex.com/go/qna 列表中?诡异。。
c4f36e5766583218
2019-06-12 13:47:28 +08:00
我被降权了? test
hentaisan
2019-06-12 21:04:45 +08:00
@c4f36e5766583218 #3 没事,你或在 RSS 里面

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/572974

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX