初识爬虫的那天,我选择了Java
本科时 , 毕业论文需要不少网络上用户的问答数据 。 那时 , 我还没有搞过网络爬虫 , 只能利用关键词搜索的方式 , 找到相关数据 , 然后一条一条复制 。 我也觉得这样很傻 , 但不得不承认这确实我最初的操作方式 , 很艰难 , 累的手疼 。
文章插图
后来 , 读研究生时 , 做项目的同时还要搞科研 。 项目和科研 , 都需要采集大量的网络数据 。 领头做项目的师兄 , 指定了一系列国内外网站 , 并把采集任务分配给我 。 对于当时啥都不咋会的我 , 内心“啥?这该咋弄啊?这咋弄啊?……”可是没办法 , 即便瑟瑟发抖 , 硬着头皮还是要上 。
文章插图
好在有着师兄指点 , 让我去学习网路爬虫 , 说网路爬虫可以搞定“我想要的数据” 。 为了“活”下去 , 我决定放手一搏 , 但在学习准备阶段我就遇到了我的第一个“爬虫难题” 。
文章插图
文章插图
【初识爬虫的那天,我选择了Java】决定要用网络爬虫去采集数据 , 面临一个选择就是:是用Java还是Python写网络爬虫呢?对于一个新手 , 我翻阅了网上各种对比的帖子 , 各有各的观点 , 其中不少说Python上手容易 , 写起来方便 。 但最终我还是选择了Java , 有以下几点原因:
1. Java火了很多年 , 而且依旧很火 , 其生态也比较完善 。 目前 , 很多大公司的系统皆采用Java设计 , 足以说明其强大之处 。 把Java学好了 , 足够让我找一份不错的工作 , 即入职大厂 。
2. Java严谨规范 , 对于大型工程、大型程序 , 如果不规范不严谨维护岂不容易出问题 。
3. 对网络爬虫而言 , JAVA中也有很多简单易用的类库(如Jsoup、Httpclient等) , 同时还存在不少易于二次开发的网络爬虫框架(Crawler4J、WebMagic等) 。
4. 曾在一个帖子中看到 , “世界上99%的人都会选择一条容易走的大路 , 因为人都喜欢安逸 。 这也是人的大脑的思维方式决定的 , 因为大脑的使命是为了让你生存 , 而不是求知 。 但成功是总是属于那1%的人 , 这类人是坚持让大脑做不愿意做的事的人——求知” 。 哎 , 这在我看来 , 还真有一定的道理 。 如果励志想成为一名真正的程序员 , 建议先学习Java 。 在此基础上 , 如果你对Python感兴趣 , 也是可以快速上手的 。
文章插图
1 网络爬虫流程
学习网络爬虫之前 , 先看了普通网络爬虫大致流程 , 如下图所示:
文章插图
主要包括5个步骤:
1. 选取部分种子URL(或初始URL) , 将其放入待采集的队列中 。 如在Java中 , 可以放入List、LinkedList以及Queue中 。
2. 判断URL队列是否为空 , 如果为空则结束程序的执行 , 否则执行步骤3 。
3. 从待采集的URL队列中取出一个URL , 获取URL对应的网页内容 。 在此步骤需要使用HTTP响应状态码(如200和403等)判断是否成功获取到了数据 , 如响应成功则执行解析操作;如响应不成功 , 则将其重新放入待采集URL队列(注意这里需要过滤掉无效URL) 。
4. 针对响应成功后获取到的数据 , 执行页面解析操作 。 此步骤根据用户需求获取网页内容中的部分字段 , 如汽车论坛帖子的id、标题和发表时间等 。
5. 针对步骤4解析的数据 , 执行数据存储操作 。
2 需要掌握的Java基础知识
在使用Java构建网络爬虫时 , 需要掌握很多Java方面的基础知识 。 例如 , Java中基本的数据类型、Java中的数组操作、判断语句的使用、集合操作、对象和类的使用、String类的使用、日期和时间的处理、正则表达式的使用、Maven工程的创建、多线程操作、日志的使用等 。
文章插图
看着知识点很多 , 但如果将其放入到具体的网络爬虫实战项目中去学习 , 会发现很简单 。 下面 , 我举两个例子 。
在网络爬虫中 , 我们经常需要将待采集的URL放到集合中 , 然后循环遍历集合中的每个URL去采集数据 。 比如 , 我们使用Queue集合操作:
Queue urlQueue = new LinkedList();//添加要采集的URLurlQueue.offer("");urlQueue.offer("");urlQueue.offer("");boolean t = true;while (t) {//如果队列为空,循环结束if( urlQueue.isEmpty() ){t = false;}else {//取出每个URLString url = urlQueue.poll();//获取HTMLString getHtml = ...;//判断是否成功请求到HTMLif (成功请求到HTML) {//解析数据...;}else { //如果网页存在但没有请求到数据 , 重新添加到队列中urlQueue.offer(url);}}}
- 智能手机市场|华为再拿第一!27%的份额领跑全行业,苹果8%排在第四名!
- 会员|美容院使用会员管理软件给顾客更好的消费体验!
- 行业|现在行业内客服托管费用是怎么算的
- 人民币|天猫国际新增“服务大类”,知舟集团提醒入驻这些类目的要注意
- 国外|坐拥77件专利,打破国外的垄断,造出中国最先进的家电芯片
- 技术|做“视频”绿厂是专业的,这项技术获人民日报评论点赞
- 面临|“熟悉的陌生人”不该被边缘化
- 中国|浅谈5G移动通信技术的前世和今生
- 页面|如何简单、快速制作流程图?上班族的画图技巧get
- 桌面|日常使用的软件及网站分享 篇一:几个动态壁纸软件和静态壁纸网站:助你美化你的桌面