基于jsoup的爬虫

经过jsoup对 企查查 的公司信息爬取html

一、Jsoup

先介绍下Jsoup,它还有一个名称“Beautifulsoup for Java”,对爬虫知识感兴趣的朋友通常都是从Python的爬虫开始,那么天然不会对Beautifulsoup感到陌生,而Jsoup就是java环境下一样具备html文档解析的最好的选择之一。java

主要方法就是 Jsoup.parse(),解析出来的是一个Document对象。Element对象则提供了一系列相似于DOM的方法来查找元素,抽取并处理其中的元素。这边仍是根据官方文档的中文版将它们一一列举,以便使用:python

查找元素git

getElementById(String id)github

getElementsByTag(String tag)浏览器

getElementsByClass(String className)app

getElementsByAttribute(String key) (and related methods)框架

Element siblings: siblingElements(), firstElementSibling(), lastElementSibling(); nextElementSibling(), previousElementSibling()dom

Graph: parent(), children(), child(int index)学习

元素数据

attr(String key)获取属性attr(String key, String value)设置属性

attributes()获取全部属性

id(), className() and classNames()

text()获取文本内容text(String value) 设置文本内容

html()获取元素内HTMLhtml(String value)设置元素内的HTML内容

outerHtml()获取元素外HTML内容

data()获取数据内容(例如:script和style标签)

tag() and tagName()

操做HTML和文本

append(String html), prepend(String html)

appendText(String text), prependText(String text)

appendElement(String tagName), prependElement(String tagName)

html(String value)

这给我大体的感受就像是html的读写,而爬虫就是利用它的读的功能。

二、爬虫

通常来讲,爬虫都是模拟浏览器访问的存在,可是有爬虫也就有反爬虫,尤为是像企查查这样以数据为核心的相似网站,它所创建的反爬虫机制是很是强的,这时,通常的爬虫是难以获取到想要获得的全部数据的。以前我所写过的一个爬虫(详见github)拿来做为框架已经不合适了,我也想过再系统地去学python的爬虫,为何是python?由于它的第三方包多啊,也有相应的大型能够定制的爬虫框架。可是万一仍是不行呢?而后就陷入了爬虫与反爬虫的攻防战中,对,那样应该是一个技术控要作的,但此时,更重要的是,减小时间成本与学习成本而得到大量优秀有效的数据以便后续的数据开发与分析。因此我选择一个最无脑的方式……

你们玩过浏览器的都知道有个保存网页的功能吧,嗯,咱们此次的爬虫就是至关于解析本地文档。这点固然受益于上一次爬虫的开发,就很简单的两个功能,页面请求与保存接着解析,写好的爬虫放在定时器中就能够自动执行了。此次的从代码方面看更简单,就是一次页面解析的过程,若是有N个公司的信息要得到,那么就写N个HashMap吧!

其实有了思路再加上Jsoup的方法那么简单使用,很快就能完成。

相关代码就放在github上了。

三、我的使用经验

其实有代码有说明,照着弄只要时间长点基本都能弄出来。因此这里要提供点精华了 ^_^

关于表格数据的抓取(解析)

对于表格,通常来讲获取表格数据时,都会写一个循环,由于每一行的结构都是同样的,而经过Tag的Name获取时,会同时获取表头。

好比: <tr><th>身高</th></tr>

咱们要获取的是“身高”属性 这一列的值,而并不须要“身高”。

那么咱们能够直接结束整个循环的第一次。

操做方法就是:

boolean flag = true;

在循环里加入

 

if(flag) {
        flag = false;
       }else {
        ... //须要执行的语句
           }

 

这样就能够过滤掉表头了。

上面的方法是用来解决水平结构的表格。

还有一种垂直结构的表格。

我本身的办法是,由于这种表格的表头都是有本身的标签的,因此直接利用jsoup先把dom处理一次。

Document.getElementsByClass("#").remove();

 以后再获取本身想要的信息吧~

相关文章
相关标签/搜索