千家信息网

如何使用python爬取百万github用户数据

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章将为大家详细讲解有关如何使用python爬取百万github用户数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。流程图:根据这个流程实现的代码递归实现运行
千家信息网最后更新 2026年10月31日如何使用python爬取百万github用户数据

这篇文章将为大家详细讲解有关如何使用python爬取百万github用户数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

流程图:

根据这个流程实现的代码

递归实现

运行命令

看到这么简单的流程,内心的第一想法就是先简单的写一个递归实现呗,要是性能差再慢慢优化,所以第一版代码很快就完成了(在目录recursion下)。数据存储使用mongo,重复请求判断使用的redis,写mongo数据采用celery的异步调用,需要rabbitmq服务正常启动,在settings.py正确配置后,使用下面的步骤启动:

  1. 进入github_spider目录

  2. 执行命令celery -A github_spider.worker worker loglevel=info启动异步任务

  3. 执行命令python github_spider/recursion/main.py启动爬虫

运行结果

因为每个请求延时很高,爬虫运行效率很慢,访问了几千个请求之后拿到了部分数据,这是按照查看数降序排列的python项目:

这是按粉丝数降序排列的用户列表

运行缺陷

作为一个有追求的程序员,当然不能因为一点小成就满足,总结一下递归实现的几个缺陷:

  1. 因为是深度优先,当整个用户图很大的时候,单机递归可能造成内存溢出从而使程序崩溃,只能在单机短时间运行。

  2. 单个请求延时过长,数据下载速度太慢。

  3. 针对一段时间内访问失败的链接没有重试机制,存在数据丢失的可能。

异步优化

针对这种I/O耗时的问题,解决方法也就那几种,要么多并发,要么走异步访问,要么双管齐下。针对上面的问题2,我最开始的解决方式是异步请求API。因为最开始写代码的时候考虑到了这点,代码对调用方法已经做过优化,很快就改好了,实现方式使用了grequests。这个库和requests是同一个作者,代码也非常的简单,就是讲request请求用gevent做了一个简单的封装,可以非阻塞的请求数据。

但是当我运行之后,发现程序很快运行结束,一查发现公网IP被github封掉了,当时心中千万只草泥马奔腾而过,没办法只能祭出爬虫的终极杀器--代理。又专门写了一个辅助脚本从网上爬取免费的HTTPS代理存放在redis中,路径proxy/extract.py,每次请求的时候都带上代理,运行错误重试自动更换代理并把错误代理清楚。本来网上免费的HTTPS代理就很少,而且很多还不能用,由于大量的报错重试,访问速度不仅没有原来快,而且比原来慢一大截,此路不通只能走多并发实现了。

队列实现

实现原理

采取广度优先的遍历的方式,可以把要访问的网址存放在队列中,再套用生产者消费者的模式就可以很容易的实现多并发,从而解决上面的问题2。如果某段时间内一直失败,只需要将数据再仍会队列就可以彻底解决问题3。不仅如此,这种方式还可以支持中断后继续运行,程序流程图如下:

运行程序

为了实现多级部署(虽然我就只有一台机器),消息队列使用了rabbitmq,需要创建名为github,类型是direct的exchange,然后创建四个名称分别为user, repo, follower, following的队列,详细的绑定关系见下图:

详细的启动步骤如下:

  1. 进入github_spider目录

  2. 执行命令celery -A github_spider.worker worker loglevel=info启动异步任务

  3. 执行命令python github_spider/proxy/extract.py更新代理

  4. 执行命令python github_spider/queue/main.py启动脚本

队列状态图:


关于"如何使用python爬取百万github用户数据"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

运行 数据 代理 命令 队列 代码 程序 用户 方式 流程 问题 递归 很快 时候 时间 爬虫 篇文章 要么 面的 任务 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖南永感互联网科技有限公司 互联网科技活动banner 科技创新与互联网经济 宜安科技 互联网金融 沃里互联网科技 上游互联网科技 互联网金融 科技创新 重庆科技学院互联网 成都仁贤领冠互联网科技有限公司 互联网科技产品 中盈科技互联网信息有限公司 哈尔滨新华互联网科技学院 福州新华互联网科技学校 知乎 赶超互联网科技 微信多开 青岛科技大学互联网大赛研究生 互联网科技大赛获奖感言 杭州披云加互联网科技有限公司 广州有谷有贝互联网科技有限公司 上海乐五互联网科技有限公司 优雇互联网科技有限公司 湖南永感互联网科技有限公司 国智互联网科技 美国互联网科技 现代科技和互联网有关系吗 阿大互联网科技有限公司 江阴互联网智能科技产品进口 互联网科技与大数据专业 互联网科技创新的路径 每天都有哪些好的互联网科技 中天科技中国工业互联网
0