从 0 到 1 带你搭建 Java 并发爬虫框架:爬虫原理和流程
Posted 测试开发栈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从 0 到 1 带你搭建 Java 并发爬虫框架:爬虫原理和流程相关的知识,希望对你有一定的参考价值。
私下里有不少童鞋在问爬虫框架的问题,这也是测试童鞋转测试开发或开发一个比较好的练手项目,为什么这么说呢?如果你之前已经有WEB自动化测试或接口自动化测试的经验,那么很多技术点在爬虫中也能够应用得上,比如页面分析,元素定位,接口HTTP请求,JSON解析,页面解析等等……此外通过这个实战项目,你还可能学会爬虫的原理和流程,如何整合项目,如何使用并发,数据如何处理,分层框架如何搭建等等……接下来这段时间就从实战的角度分享下如何从 0 到 1 一步步搭建 Java 并发爬虫框架,大概的篇章是这样的(具体会根据篇幅大小来增减):
入门篇:
一、了解爬虫的原理与流程
实战篇:
二、新建 SpringBoot 项目
三、构建免费代理服务
四、HTTP 请求封装
四、实现业务爬取逻辑
五、集成Bomb云数据库
六、构建任务调度
为什么要了解爬虫?
“数据是新一轮技术革命最重要的生产资料”,在互联网行业可以近似的说拥有了数据就拥有了市场。爬虫在互联网上无处不在,国内外的各大搜索引擎都是基于爬虫抓取信息后检索的,所以说 “互联网上 50% 的流量都是爬虫创造的” 这一点都不为过。近 2 年爬虫技术跟随着大数据的火热逐渐从台后走到台前,被越来越多的人所熟知,也被应用的越来越广泛,小到个人利用爬虫抓取数据分析建模,大到利用爬虫构建公司的内容和数据生态圈。所以爬虫已经成为一门 “平民化” 的技术,大家在工作和学习中都有用得着的地方。
爬虫的原理与流程
本篇重点是要讲述如何构建爬虫框架,但考虑到大家的对爬虫的了解程度不同,所以还是稍微带一下爬虫的原理和流程。
爬虫的主要目的就是爬取目标数据,但是为了达到这个目的,还需要很多辅助工作要做,比如前期的目标 URL 提取或页面分析,绕过登录限制,以及爬虫身份的隐藏、爬虫的调度和容错处理等,还有最后的数据清洗和入库。一个完整的爬虫程序应该是包含分析、爬取到入库等一系列流程的,为了直观我就画一个图来表示:
当然上面只是一个单线的爬虫流程,如果考虑到分布式和并发功能等,还需要继续加上任务调度功能。比如前期已经解析出了 URL,并发现了 URL 的数据分页关系,假定用 pageNumber 来表示分页 index,那么完全可以一次并发 10 个线程去跑 10 个任务,每个任务就是爬取指定 URL 的的数据,这样就可以大大提高爬取效率。
此外,前面还提到过容错处理,这里也说明一下,爬虫在爬取过程中有时可能会遇到突发异常,比如目标服务器异常、网络异常、对方实施了反扒策略等,这种情况我们也需要分别考虑到,通常需要加入重试机制,你可以自己定义什么类型的异常需要加入重试,比如请求失败,这可能被对方屏蔽了,也可能网络出现了震荡。所以这时候重试 2 次看看,如果重试还是失败,那么就可以放弃这次爬取任务了,你可以将失败的任务记录下来,后面等空闲或等实现失败任务定时调度功能,等待下一次的再次调度;并设置一个最大的调度失败次数(比如 3),超过这个次数,移除这个任务,以后都不用考虑了。
另外对于页面数据解析,要分 2 种情况,提取的种子 URL 请求后返回的是 JSON 或 XML 格式的,直接用 FastJson 来解析 JSON 即可,可是通常没有这么方便,很多时候需要我们去解析页面的 html 文档,这时候就需要用到 jsoup 来解析页面,从而拿到我们需要的数据。这些流程中具体的功能和问题都会在后面的框架搭建时体现。
下篇预告:爬虫框架和项目搭建
测试开发栈
软件测试开发合并必将是趋势,不懂开发的测试、不懂测试的开发都将可能被逐渐替代,因此前瞻的技术储备和知识积累是我们以后在职场和行业脱颖而出的法宝,期望我们的经验和技术分享能让你每天都成长和进步,早日成为测试开发栈上的技术大牛~~
长按二维码/微信扫描关注
互联网测试开发一站式全栈分享平台
以上是关于从 0 到 1 带你搭建 Java 并发爬虫框架:爬虫原理和流程的主要内容,如果未能解决你的问题,请参考以下文章
从基础到实战,一步步带你从 0 到 1!阿里新产高并发系统设计全彩版手册我粉了!
还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!
还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!