A scalable web crawler framework for Java.
本次更新修复了一些0.6.0的问题和一些小优化。
注:默认信任所有证书会有内容伪造的风险,但是考虑到爬虫的便利性还是加上了,使用者需要自己判断内容安全性。
此次更新主要是一些依赖包的升级和bugfix。
#290 代理增加用户名密码认证 @hepan
#194 重构代理池部分代码,支持自定义代理池 @EdwardsBean
#314 修复低版本json-path依赖2.x的StringUtils导致报错的问题
#380 升级fastjson 到1.2.21
#301 修复JsonPath在注解模式不可用的问题 @Salon-sai
#377 修复监控模块在URL带有端口时会报错的问题
#400 修复FileCacheQueueScheduler的NullPointerException问题
#407 为PhantomJSDownloader添加新的构造函数,支持phantomjs自定义命令 @jsbd
#419 修复抓取https链接线程无法结束导致进程一直运行的问题 @cpaladin
#374 升级HttpClient到4.5.2,修复一些安全问题
#424 去掉Guava依赖
因为Guava不同版本兼容性不好,经常导致demo无法运行,所以我最后决定去掉了Guava的依赖。如果使用了BloomFilterDuplicateRemover
的用户,需要手动依赖Guava包。
#426 去掉Avalon相关包
Avalon是之前计划的一站式抓取平台。因为有个朋友基于WebMagic做了类似的实现Gather Platform,所以Avalon放弃了,转而支持这个项目。WebMagic核心会专注于做应用内的框架。
时隔一年半,作者终于回归了。这个版本主要解决之前的一些BUG,后续会慢慢的继续完善功能。
此次主要包括对于Selector部分的重构,以及一些功能的完善和一些Bugfix。
重构了Selector部分,使得结构更清晰,并且能够更好的支持链式的XPath抽取了。 [Issue #113]
支持对于选取出来的结果,进行外部迭代。例如:
List<Selectable> divs = html.xpath("//div").nodes();
for (Selectable div : divs) {
System.out.println(div.xpath("//h2").get());
}
增强自动编码识别机制,现在除了从HTTP头中,还会从HTML Meta信息中判断编码,感谢@fengwuze @sebastian1118提交代码和建议。[Issue #126]
升级Xsoup版本为0.2.4,增加了判断XPath最终抽取结果(是元素还是属性)的API,完善了一些特殊字符处理的功能。
增加PageMapper功能,以后可以在任何地方使用注解模式来解析页面了![Issue #120] 例如:
public void process(Page page) {
//新建Mapper,GithubRepo是一个带注解的POJO
PageMapper<GithubRepo> githubRepoPageMapper = new PageMapper<GithubRepo>(GithubRepo.class);
//直接解析页面,得到解析后的结果
GithubRepo githubRepo = githubRepoPageMapper.get(page);
page.putField("repo",githubRepo);
}
增加多个代理以及智能切换的支持,感谢@yxssfxwzy 贡献代码,使用Site.setHttpProxyPool可开启此功能。[Pull #128]
public void process(Page page) {
Site site = Site.me().setHttpProxyPool(
Lists.newArrayList(
new String[]{"192.168.0.2","8080"},
new String[]{"192.168.0.3","8080"}));
}
Bugfix:
此次更新主要包括Scheduler的一些改动,对于自己定制过Scheduler的用户,强烈推荐升级。
DuplicateRemover
,将去重单独抽象出来,以便在同一个Scheduler中选择不同的去重方式。 #118使用以下的方式即可将默认的HashSet去重改为BloomFilter去重:
spider.setScheduler(new QueueScheduler()
.setDuplicateRemover(new BloomFilterDuplicateRemover(10000000)) //10000000是估计的页面数量
此次更新主要增加了监控功能,同时重写了多线程部分,使得多线程下性能有了极大的提升。另外还包含注解模式一些优化、多页面的支持等功能。
page.getJson().jsonPath()
来使用jsonPath解析AJAX请求,也可以使用page.getJson().removePadding().jsonPath()
来解析JSONP请求。 #101nth-of-type
选择的问题(例如//div/svg[2]
) 。#75Site
中设置Cookie时,可以指定域名,而不是只能使用默认域名了。 #109setScheduler()
方法在调用时,如果之前Scheduler已有URL,会先转移到新的Scheduler,避免URL丢失。 #104log4j.xml
,避免与用户程序冲突,感谢@cnjavaer 发现问题。 #82Enhancement: #45 Remove multi option in ExtractBy. Auto detect whether is multi be field type. Bugfix: #46 Downloader thread hang up sometiems.
More support for ajax:
The performance of Downloader is improved by 90% in my test.Test code: Kr36NewsModel.java.
OOSpider ooSpider = OOSpider.create(Site.me().setSleepTime(100), BaiduBaike.class);
BaiduBaike baike = ooSpider.<BaiduBaike>get("http://baike.baidu.com/search/word?word=httpclient&pic=1&sug=1&enc=utf8");
System.out.println(baike);