标签:
package com.mengyao.webmagic.test1;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.ResultItems;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.FilePipeline;
import us.codecraft.webmagic.processor.PageProcessor;
/**
* WebMagic的结构分为Downloader、PageProcessor、Scheduler、Pipeline四大组件,并由Spider将它们彼此组织起来。这四大组件对应爬虫生命周期中的下载、处理、管理和持久化等功能。
* 1.Downloader Downloader负责从互联网上下载页面,以便后续处理。WebMagic默认使用了Apache HttpClient作为下载工具。
* 2.PageProcessor PageProcessor负责解析页面,抽取有用信息,以及发现新的链接。WebMagic使用Jsoup作为HTML解析工具,并基于其开发了解析XPath的工具Xsoup。在这四个组件中,PageProcessor对于每个站点每个页面都不一样,是需要使用者定制的部分。
* 3.Scheduler Scheduler负责管理待抓取的URL,以及一些去重的工作。WebMagic默认提供了JDK的内存队列来管理URL,并用集合来进行去重。也支持使用Redis进行分布式管理。除非项目有一些特殊的分布式需求,否则无需自己定制Scheduler。
* 4.Pipeline Pipeline负责抽取结果的处理,包括计算、持久化到文件、数据库等。WebMagic默认提供了“输出到控制台”和“保存到文件”两种结果处理方案。
* @author mengyao
*
*/
public class JdPageProcessor implements PageProcessor {
private Logger logger = LoggerFactory.getLogger(getClass());
//抓取网站的相关配置,包括编码、抓取间隔、重试次数等
private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);
//爬取京东所需的业务配置
private static class JdConf{
static String JD_HOME_ALLCLS_NAME = "cls";
static String JD_HOME_ALLCLS_XPATH = "//div[@id=‘categorys-2014‘]/div/a/@href";
}
//校验是否成功获取网页内容
private void valid(Page page, ResultItems resultItems, String key){
if (resultItems.get(key)==null) {
page.setSkip(true);
}
}
//获取指定内容
private Object get(ResultItems resultItems, String key){
return resultItems.get(key);
}
@Override
public void process(Page page) {
//定义如何抽取页面信息,并保存下来
page.putField(JdConf.JD_HOME_ALLCLS_NAME, page.getHtml().xpath(JdConf.JD_HOME_ALLCLS_XPATH));
valid(page, page.getResultItems(), JdConf.JD_HOME_ALLCLS_NAME);
logger.info("==== 获取属性{}:值:{} ====", JdConf.JD_HOME_ALLCLS_NAME, get(page.getResultItems(), JdConf.JD_HOME_ALLCLS_NAME));
}
@Override
public Site getSite() {
//初始化爬取京东站点的编码配置
this.site.setCharset("gbk");
//初始化爬虫的UA标识
this.site.setUserAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0");
return this.site;
}
public static void main(String[] args) {
//Spider是WebMagic控制爬虫运转的引擎,即爬虫启动的入口
Spider.create(new JdPageProcessor()).addUrl("http://www.jd.com").addPipeline(new FilePipeline("D:/")).thread(1).start();
}
标签:
原文地址:http://www.cnblogs.com/mengyao/p/4771823.html