Java爬虫领域最强大的框架是JSoup:可直接解析具体的URL地址(即解析对应的html),提供了一套强大的API,包括可以通过DOM、CSS选择器,即类似jQuery方式来取出和操作数据。主要功能有:
- 从给定的URL、文件、字符串中,获得HTML代码。
- 然后通过DOM、CSS选择器(类jQuery方式)来查找、取出数据:先找到HTML元素,然后获取其属性、文本等。
API初步学习:
上面提到了三种方式,获取HTML文档(JSoup的Document对象的结构是:<html><head></head><body></body></html>):
1、通过字符串:String html="hello"; Document doc = Jsoup.parse(html);//(此时JSoup会把hello放在doc对象中的body中。如果字符串是一个完整的html文档,那么doc对象将以字符串的html结构为准)。
2、获取URL的HTML文档(注意:这种方式下,只有当调用get或post方法时,才真正发送请求):
//通过URL获得连接:Connection对象
Connection conn = Jsoup.connect("http://www.baidu.com");
//以下为主要方法,多数返回Connection
conn.data("query", "Java"); // 请求参数
conn.userAgent("I ’ m jsoup"); // 设置 User-Agent
conn.cookie("auth", "token"); // 设置 cookie
conn.timeout(3000); // 设置连接超时时间
//发送请求,获得HTML文档:Document对象
Document doc = conn.get();
Document doc = conn.post();
获取元素:
1、通过DOM方式(与纯javascript方式相同):
//获取文档级信息,如:
String title = doc.title();
//获取单个HTML元素,如:<div id="content"></div>
Element content = doc.getElementById("content");
//获取多个元素,如:<a href="http://www.qunyh.cn"></a> <a href="http://cn.bing.com"></a>
Elements links = doc.getElementsByTag("a");
2、类似于jQuery的方式,这里是将$换成了select方法:
//select的参数是类似于jQuery的选择器selector
Elements allP = doc.select("p");
Element firstP = allP.first();
Element oneP = allP.get(1);//从0开始
//操作元素:
for (Element p : allP) {
//操纵元素:这里就类似于jQuery
String text = p.text();
}
当然JSoup只是模仿jQuery的方便性,并不具备jQuery的所有功能,例如jQuery的插件肯定是无法在JSoup中使用。因此如果对JS掌握很好,选择Node.js+MongoDB来处理就比较有优势(即相互之间的支持度比较大)。如果熟悉Java,那么就可以选择JSoup+mysql+Quartz,也是非常好用的(全程java实现,省心方便),再配合Java调度器Quartz,就可实现一个完整的爬虫了。
爬虫框架 Gecco:
Gecco 是用 Java 实现的,轻量化,面向主题的爬虫,与 Nutch 这种面向搜索引擎的通用爬虫不同:
- 通用爬虫通常关注三个问题:下载、排序、索引。
- 主题爬虫则关注:下载、内容抽取、灵活的业务逻辑处理。
Gecco 的目标:提供一个完善的主题爬虫框架:简化下载和内容抽取的开发;利用管道过滤器模式,提供灵活的内容清洗和持久化处理模式。故而开发可以集中精力在业务主题方面的逻辑、内容处理。
学习一个框架,首先要了解到它的用途何在:
- 简单易用,使用 jQuery 的 Selector 风格抽取元素。
- 支持页面中的异步 Ajax 请求。
- 支持页面中的 JavaScript 变量抽取。
- 利用 Redis 实现分布式抓取,可参考 Gecco-Redis。
- 支持下载时 UserAgent 随机选取。
- 支持下载代理服务器随机选取。
- 支持结合 Spring 开发业务逻辑,参考 Gecco-Spring。
- 支持 htmlUnit 扩展,参考 Gecco-htmlUnit。
- 支持插件扩展机制。
一分钟你就可以写一个简单爬虫:
找资料的时候发现了新的、不错的爬虫框架(以后有时间尝试):
Gecco Crawler:
Gecco是一款用java语言开发的轻量化的易用的网络爬虫,不同于Nutch这样的面向搜索引擎的通用爬虫,Gecco是面向主题的爬虫。
https://github.com/xtuhcy/gecco
https://xtuhcy.gitbooks.io/geccocrawler/content/index.html
https://my.oschina.net/u/2336761/blog/688534
模板代码生成器:J2ee template(由JSoup开发而成,可借鉴其如何开发的爬虫):
https://www.oschina.net/p/jeetemp