webmagic结合seimiagent实现动态信息页面的采集
简介
webmagic是一个非常流行的已api方式采集网页信息的项目,但是对于动态加载的信息不能很好的支持,而目前大多数网页都或多或少的采用了动态加载方式展示页面信息。
目前webmagic已经有了一个解决方案–webmagic-selenium,采用了自动测试工具selenium为支撑的方式采集,但是笔者发现了另外一个开源项目也能很好的实现这个功能。
存在的问题(坑)
1 seimiagent性能较差,建议对一次采集非动态页面采用原始采集方法,动态页面通过seimiagent采集。
2 seimiagent暂时好像不支持集群的方式(没有详细测试),如果大规模采集可能会遇到技术瓶颈
3 seimiagent只支持post请求,解析HTML页面分析链接时候比较麻烦。
网页分析
以大连链家网为例(http://dl.lianjia.com/ershoufang/rs/),页面下部的翻页按钮都是通过动态加载方式得到的。
虽然我们在浏览器上是能够看到翻页按钮的但是,这部分按钮是执行js后生成,webmagic是不会执行js的,所以在webmagic看来这个网页就是js和html代码并不包含分页按钮部分。
通过下面的程序可以查看webmagic得到的html代码
package us.codecraft.webmagic.samples;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.FilePipeline;
import us.codecraft.webmagic.processor.PageProcessor;
/**
* 大连链家网数据采集
* http://dl.lianjia.com/ershoufang/rs/
* Created by hp on 2016/12/14.
*/
public class LianjiaDLPageProcessor implements PageProcessor {
private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);
@Override
public void process(Page page) {
System.out.println( page.getHtml().toString());
}
@Override
public Site getSite() {
return site;
}
public static