项目github_crawler测试

项目描述

通过爬虫程序去抓取awesome—java项目中上榜的github项目,获取每个项目的主页信息,从而知道该项目的star、fork、open_issue数,最终进行按照star进行排序,并且形成一个直观的柱状图排行榜。实现一个类似于”github趋势”的功能。

项目流程

抓取模块:基于OkHttpClient获取github的页面内容。
分析模块:基于Jsoup分析网页结构,解析出需要的数据。
存储模块:基于MySQL将数据存储到数据库中。
展示模块:基于Echarts通过网页展示抓取到的数据的图表信息。

项目中遇到的问题

1.爬虫次数限制

GitHub的API默认访问次数是每小时60次,都不够爬取一次。因此调用 Github API 获取指定仓库的信息。通过用户名、密码的验证,使得访问次数变为每小时5000次。

2.爬出的github项目不合格

在爬取的过程中,爬取到了一些页面信息,不属于要参与排行的项目。通过设置url黑名单,将这些过滤掉。后续还发现了个别与一般github项目形式不一致的url,通过抛出异常,使得程序能够持续运行下去,不因为报错而停止爬取。

项目优化

打印出了每一个模块所需的时间,找到了性能瓶颈。

获取入口页面解析项目列表时间解析所有项目时间获取数据库时间项目总时间
5s2s1313s141s

由表格可知 ,大部分时间都花在了解析项目上,性能最差的是循环调用Github API,因此使用多线程的方式重新组织核心逻辑. 访问 Github API 变成并行式访问。

一个线程五个线程十个线程二十个线程五十个线程一百个线程
141s33s24s13s10.5s9s

我们最终确定线程数为20。这样既能大幅度提高项目性能,与更多的线程相比较,线程的开销更少,更为合适。

最后,对整个项目设计了测试用例
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值