您的位置:首页 > 理论基础 > 计算机网络

分布式网络爬虫架构-技术选型

2015-09-07 16:06 716 查看
分布式爬虫:Nutch,主要依赖Hadoop,存储于Mysql,Hbase,Hdfs等。
单机爬虫:Crawler4j、WebMagic、WebCollector
WebMagic ,若分布式,需要集成插件webmagic-extension,通过redis来存储URL。

webmagic的使用文档:http://webmagic.io/docs/

webmagic的设计文档:webmagic的设计机制及原理-如何开发一个Java爬虫

package com.ifeng.auto.webmagic;

import java.util.List;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.ConsolePipeline;
import us.codecraft.webmagic.pipeline.FilePipeline;
import us.codecraft.webmagic.processor.PageProcessor;

/**
* 抓取内容:图片、地点、时间、图片文字,用户基本信息
* 抓取目标:面包旅行(例:http://web.breadtrip.com/trips/2387672324/)
* @author yccn
*
*/
public class ImgBreadtripPageProcessor implements PageProcessor {

private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);

@Override
public void process(Page page) {

List<String> links = page.getHtml().links().regex("http://web\\.breadtrip\\.com/trips/\\d+/").all();
page.addTargetRequests(links);

page.putField("title",  page.getHtml().xpath("//title/text()").toString().trim());
page.putField("keywords", page.getHtml().xpath("//meta[@name='description']/@content").toString().trim());
page.putField("description", page.getHtml().xpath("meta[@name='keywords']/@content").toString().trim());

page.putField("days", page.getHtml().xpath("//div[@class='trip-days']/h3/span[1]/text()").all());
page.putField("cons", page.getHtml().xpath("//div[@class='waypoint']/p[@class='text photo-comment']/text()").all());
page.putField("pics", page.getHtml().xpath("//a[@class='fancy-group']/img/@data-original").all());
page.putField("times", page.getHtml().xpath("//div[@class='time float-left']/text()").all());
page.putField("sites", page.getHtml().xpath("//span[@class='one-row-ellipsis']/text()").all());

}

@Override
public Site getSite() {
return site;
}

public static void main(String[] args) {

Spider.create(new ImgBreadtripPageProcessor())
.addUrl("http://web.breadtrip.com/explore/")
//.addPipeline(new ConsolePipeline())
.addPipeline(new FilePipeline("/Users/yccn/tmp/webmagic/"))
//.thread(1)
.run();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: