爬虫系统简介

爬虫系统简单介绍

爬虫所包括的组件

  1. 下载组件
  2. 解析组件
  3. 持久化组件
  4. 去重组件

下载组件

请求http地址,下载网页内容,java支持原生的url方式请求http请求
HttpClient :apache开源的http请求的组件
htmlunit :一个模拟浏览器的开源的java 页面分析工具,结合URLconnetion和httpClient两种请求方式。
okhttp : android的HTTP请求组件,也非常好用。
以上四种方式都是以下载http资源,htmlunit功能稍微强大一点,他还可以加载js和css,但是对于爬虫来说css的加载也没什么意义,但是有时候加载js还是很有必要的。
任何一种方式都可以,就看大家如何选择了,个人感觉java原生支持的方式不够友好,但是不用加载很多依赖 ,其他几种方式使用起来还是非常顺手的,调用的过程很简单。下载组件一般是以util的形式出现的,写完之后很少再去修改,除非有http请求的bug,所以一旦写完,基本也就没啥事了,使用任何一种方式都ok。

解析组件

我们很多时候写的爬虫目的不是为了做一个像谷歌百度一样的搜索引擎,而是为了获得具体的信息,这就需要对页面进行解析,比如我们抓取csdn的博客,那么我们需要的就是博客的title以及作者,和博客的内容,不需要其他的内容,那么这时候就需要对html页面进行解析,获取我们需要的文本内容。
推荐两个工具,一个是htmlCleaner,一个是JSOUP。
HTMLCleaner支持XPATH,如果大家想对xpath有进一步的了解,可以自行百度,XPATH就是一种支持XML节点定位的语言,HTML可以理解成是一种XML ,通过XPATH可以定位到我们的资源。
JSOUP和HTMLCleaner作用是一样的,都是为了解析HTML文本,获取到我们需要的问题内容。

持久化组件

这个很容易理解,我们抓取的内容总得存下来,不然爬虫爬了也没什么意义,这个就需要持久化组件,目的就是为了将数据存起来,至于存都mysq,hbase,redis,就看你的实现了。

去重组件

爬虫抓取过程中一定要对已经抓过的内容进行去重,不然可以想象,爬虫很多时候都是在做无意义的死循环,对抓过的内容反复的下载解析,这是没有意思的。 去重的目的就是对抓取的link做一个记录,实现方式有很多种。如果只对单个网站抓取,并且网站不大的话,使用java搞个SET都能搞定,如果数据量很大的话,可以使用REDIS,Memeched这类内存库进行过滤去重工作,还有一种bloomfilter,很适合这类场景。
工具:
1. JAVA SET
2. REDIS ,MEMCACHED
3. BLOOMFILTER

流程梳理

盗用一张图来说明一下流程。
爬虫系统简介_第1张图片

总结

爬虫系统具备java基础都可以实现,最重要的时需要满足自己的需求,并且可以在增加需求的时候,可以快速扩展。目前JAVA有很都开源的爬虫系统都非常优秀,后面如果有机会,会找一个仔细的研究一下。

你可能感兴趣的:(一起写爬虫)