Java热门应用龙虎榜

  • 1.项目需求
  • 2.项目介绍
  • 3.项目思路
  • 4.项目难点
  • 5.项目评价

1.项目需求

随着我对 Java 语言的深入学习,我发现 Java 不仅仅是一门语言,还是一套日趋成熟的技术体系.我渐渐地明白了对语言的学习不能只停留在语言本身,还要钻研其背后的技术体系.于是我就想尽可能多的搜集一些有关 Java 的知识和技术.通过老师的介绍我知道了 GitHub 上有一个名叫 Awesome Java 的项目(一个罗列了大量当前热门 Java 应用的项目),同时也由于 GitHub 的特殊性(对用户提供爬虫 api),所以最终我决定做一个有关 Java 热门应用的龙虎榜.

2.项目介绍

此项目以 Awesome Java 项目(GitHub项目)为目录索引,利用爬虫机制爬取该项目所陈列的各种 Java 热门应用基础信息(url、star、fork等),并通过 star 的数量比较进行排行展示(柱状图)。

3.项目思路

(1) 首先观察该项目的网页结构如下:

通过观察其网页结构可以得到如下信息:
a.同类型的上榜项目都属于同一个无序表,表中元素为一个一个的 li 标签;
b.每一个上榜项目的项目名都是一个链接(即 a 标签中的 text 部分是项目名);
至此我们可以考虑通过访问页面获取页面返回结果,通过解析返回结果的 a 标签和 li 标签获取上榜项目的仓库名, url, 项目描述等信息并对这些信息进行封装.
上述过程中使用到的技术主要有 okhttp3 、jsoup 和 gson.其中 okhttp3 负责页面请求和获取响应数据, jsoup 则负责以 DOM 文档的格式解析响应数据,获取每个上榜项目的基本信息;
(2) 通过(1)中的操作已经获取了 Awesome Java 项目所陈列的所有合法上榜项目(通过观察页面还是有一些不合法的上榜项目或非项目内容会被读取到,稍后讲解处理),以及各子项的封装实例.此时所要进行的操作是将所有封装实例的基本信息进行持久化存储,即将信息保存到数据库中.本次我采用的是 mysql 数据库,利用 jdbc 对数据库实现连接,查询和存储操作;
(3) 当数据准备就绪后,就可以进行最后的图表展示模块了,即通过网页来显示抓取信息的图表.这里面涉及到一些前端的知识: echarts 进行图表绘制, ajax 实现异步请求等.
最终结果如下:

4.项目难点

难点一:
现在的网站一般都有反爬虫机制,所以如何绕过网站的反爬虫机制应该算是一大难点,首先要明白的是反爬虫技术如果应用不当,可能会产生很严重的后果-----服务器宕机.这无疑是要负法律责任的,所以我们可以优先考虑网站所提供的爬虫 api.令人庆幸的是,GitHub 有属于自己的爬虫 api,我们可以直接使用该 api 获取自己想要的数据.
难点二:
有的网站规定了同一个客户端在一段时间内所能请求资源的最大数量,这对爬虫项目来说无疑是一大制约,如何解决这个问题要着重考虑.这在本项目中的处理方法是通过在请求头中添加身份验证信息.成功验证后,就可以有 5000 次的访问机会.
难点三:
通过对最初版本的测试发现,程序运行的大量时间都花费在了页面的请求和等待响应上,所以可以针对其进行性能优化.优化最简单直接的方法就是使用多线程实现每个上榜项目的异步请求和响应等待(我使用了线程池).

5.项目评价

优点:
1.由于有 GitHub 原生 api 的支持,所以省去了反爬虫的技术,使得爬虫项目更加简单和整洁;
2.采用线程池技术,实现了异步处理网页请求和等待响应,大大节约了程序的执行时间;
3.将数据处理,数据控制和视图展示分离以及 maven的使用,简化了开发的复杂程度,提高开发效率.

缺点:
1.由于是通过原生 api 进行爬取,所能爬取的数据内容和数据形式都是固定的,无法进行添加和删减;
2.由于判断是否属于上榜项目的方法是单一的,简单的,所以可能存在漏掉的上榜项目或不是上榜项目的内容被选择.

Java 热门应用龙虎榜相关推荐

  1. 下载频道Java热门资料汇总

    Java应用广泛,涉及个人PC.数据中心.游戏控制台.科学超级计算机.移动电话和互联网等领域,同时拥有全球最大的开发者专业社群.网友 wglzaj 帮大家整理了115个下载中心的热门资料,制作了一个下 ...

  2. java 热门搜索 实现_热门搜索词获取java版

    日常生活中经常会有这样的需求,就是网站上.app上需要展示近期热搜的一些词汇,其实常用的做法当然是自己写爬虫去爬,不过这种办法是在太麻烦了,为了节省时间,可以调用一些接口来实现,比如常用的聚合数据,小 ...

  3. 【Java学习全家桶】1460道Java热门问题,阿里百位技术专家答疑解惑

    原文链接:点击打开链接 阿里极客公益活动: 或许你挑灯夜战只为一道难题 或许你百思不解只求一个答案 或许你绞尽脑汁只因一种未知 那么他们来了,阿里系技术专家来云栖问答为你解答技术难题了 他们用户自己手 ...

  4. 有没搞错?Java 对象不使用时要赋值为 null?

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 许多Java开发者都曾听说过"不使用的对象应手动赋 ...

  5. 2021 年度热门技术书单提前公开,这些好书藏不住了

    万事开头难,很多人觉得通过书籍提升技术很难,其中最大障碍很可能是选不到一本适合自己的书. 市面上介绍 Python.Java等技术书籍这么多,从中选出一本精品好书却很难. 常常买了一本很贵的书,看了个 ...

  6. java从入门到精通_Java入门到精通、学习路线、就业方向、薪资及前景分析(上篇)...

    今天就大家最关心的Java热门问题进行简要分析,希望能对想要学习或是正在学习Java的小伙伴能够有所帮助~(大家多多关注呦~) 一.首先我们要了解Java是什么? 好学吗? Java是一种广泛使用的计 ...

  7. 500道Java 必备面试题答案(过后即删)

    每个技术人都有个大厂梦,我觉得这很正常,并不是饭后的谈资而是每个技术人的追求.像阿里.腾讯.美团.字节跳动.京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻 ...

  8. Java面试详解(2020版):500+ 面试题和核心知识点详解

    与其在网上拼命的找面试题,不如加入我们畅快的阅读. 为了写好这些面试题,我先后拜访了一二十家互联网公司,与不同的面试官和面试者进行面对面探讨,深入了解了企业对于面试者的要求和常见的 Java 面试题型 ...

  9. ​【月报】Java知音的三月汇总

    往期: Java知音的十月:[月报]Java知音十月汇总 Java知音的十一月:[月报]Java知音十一月汇总 Java知音的十二月:[月报]Java知音十二月汇总 Java知音的一月:[月报]Jav ...

最新文章

  1. 数据中心供配电系统负荷计算实例分析
  2. 深度揭秘:大数据时代企业卖技术还是卖数据?
  3. 遇到automation服务器不能创建对象...
  4. android中AndroidManifest.xml 的解析 (转)
  5. php-数据分析 余弦相似度实现
  6. This document is opened by another project error message
  7. python打开csv文件、计算总成绩_实现读取csv文件,文件里面是有限个百分数成绩(99.6、76.8等等...
  8. Codeforces Round #697 (Div. 3)A~G解题报告
  9. 检查浏览器支持(Checking browser support),这个是很广泛的一个知识!
  10. 第一次冲刺团队绩效评估
  11. 对电机油冷分析_油冷电驱汇总(Tesla/Nidec/大众MEB/雪佛兰/华为)
  12. UITableView分段加载数据
  13. matlab建立遗传算法,Matlab遗传算法(一)
  14. openGL加载obj三维模型
  15. 远程桌面无法复制粘贴传输文件解决办法
  16. iOS 导航栏透明度 监听导航栏返回进度
  17. android cts测试超时设置,Android的CTS测试
  18. linux命令行查地图,linux n地图 命令
  19. html+js+css国际象棋,画面超精致!!
  20. Licode架构分析

热门文章

  1. {字母=2}履踩厦婪河运{字母=3}徒辖兔渡吧啪颊鼻驹{字母=1}
  2. 基于机器学习的雷达信号分选和目标识别(论文阅读学习记录—持续记录)
  3. java虚拟机手机下载_java虚拟机
  4. 导火索又一次引燃炸弹
  5. 计算机管理员权限win8,Win8怎么取得管理员权限?
  6. node.js 中Mysql 查询报错 ,解决方法。
  7. GIS100例033—ArcGIS制图阴影效果(制图表达方式)
  8. 下载微信头像到本地服务器
  9. STM32F1系列定时器 最大定时时间
  10. [转]windchill部分表说明