WebMagic是码云上面一个很热门的爬虫框架,非常好用便捷
地址:https://gitee.com/flashsword20/webmagic 感谢作者
爬取一个页面的时候,有些网站会通过js渲染或者通过ajax渲染,普通的无渲染就可加载出来的页面此篇文件介绍,通过js简单渲染处理的数据下篇文章,要是用户想爬取ajax渲染出来的数据,请参考WebMagic文档作者介绍的方法:http://webmagic.io/docs/zh/posts/chx-cases/js-render-page.html
正文:
1.添加这两个主要的maven
|
2.业务层
WebMagic爬虫只需要实现PageProcessor这个类就可以开始写业务
package spider; import us.codecraft.webmagic.Page; import us.codecraft.webmagic.Site; import us.codecraft.webmagic.Spider; import us.codecraft.webmagic.downloader.HttpClientDownloader; import us.codecraft.webmagic.processor.PageProcessor; import us.codecraft.webmagic.proxy.Proxy; import us.codecraft.webmagic.proxy.SimpleProxyProvider; import java.util.List; public class TestDemo implements PageProcessor { private Site site = Site.me().setRetryTimes(3).setSleepTime(1000); @Override public void process(Page page) { String list = page.getHtml().xpath("*/html/html()").toString(); page.putField("html",list); List<String> links = page.getHtml().links().regex("http://my\\.oschina\\.net/flashsword/blog/\\d+").all(); page.addTargetRequests(links); page.putField("title", page.getHtml().xpath("//div[@class='BlogEntity']/div[@class='BlogTitle']/h1").toString()); page.putField("content", page.getHtml().$("div.content").toString()); page.putField("tags",page.getHtml().xpath("//div[@class='BlogTags']/a/text()").all()); if (links.isEmpty()) { System.out.println("s==============跳过"); page.setSkip(true); }else { System.out.println("s=============="+links.toString()); } //dosomething,保存到数据库什么的 // 部分三:从页面发现后续的url地址来抓取 List<String> pageList = page.getHtml().xpath("/a/@href").all(); page.addTargetRequests(pageList); } @Override public Site getSite() { return site; } public static void main(String[] args) { //设置代理 HttpClientDownloader httpClientDownloader = new HttpClientDownloader(); httpClientDownloader.setProxyProvider(SimpleProxyProvider.from( new Proxy("244.343.322.244",5332) ,new Proxy("4245.432.421.523",3242) )); Spider.create(new Test2()) //从"https://www.youkuaiyun.com/"开始抓 .addUrl("http://my.oschina.net/flashsword/blog") //配置代理 /* .setDownloader(httpClientDownloader)*/ //开启5个线程抓取 .thread(5) //启动爬虫 .run(); } } |
这里通过page.addTargetRequests()方法来增加要抓取的URL,并通过page.putField()来保存抽取结果。page.getHtml().xpath()则是按照某个规则对结果进行抽取,这里抽取支持链式调用。调用结束后,toString()表示转化为单个String,all()则转化为一个String列表。