码迷,mamicode.com
首页 > Web开发 > 详细

WebMagic开源垂直爬虫-JD爬取1

时间:2015-08-30 23:01:13      阅读:385      评论:0      收藏:0      [点我收藏+]

标签:

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();
    }

WebMagic开源垂直爬虫-JD爬取1

标签:

原文地址:http://www.cnblogs.com/mengyao/p/4771823.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!