分布式网络爬虫架构-技术选型
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爬虫
单机爬虫: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(); } }
相关文章推荐
- 利用Git和TortoiseGit把代码传输到网络服务器
- Http通用短信接口开发经验及具体开发实现
- HTTP参数CONNETCTION_TIMEOUT和SO_TIMEOUT区别
- 功能测试的测试工作流程
- 通过HttpURLConnection上传
- https协议了解,以及相关协议的解析
- 使用Block,线程封装网络请求
- javaweb学习总结(七)——HttpServletResponse对象(一)
- Linux安装配置apache http://www.cnblogs.com/fly1988happy/archive/2011/12/14/2288064.html
- HttpServletResponse对象
- AFNetworking 网络请求默认基础网址设定
- 【转】file_get_contents无法请求https连接的解决方法
- Android基础入门教程——7.1.2 Android Http请求头与响应头的学习
- 揭开HTTP网络协议神秘面纱系列(三)
- 揭开HTTP网络协议神秘面纱系列(二)
- TCP/IP 相关总结
- http://www.cocoachina.com/ios/20150907/13336.html
- 揭开HTTP网络协议神秘面纱系列(一)
- 发送队列的默认队列策略 (linux网络子系统学习 第十一节 )
- makefile @ 符号作用 http://www.cnblogs.com/MyEyes/archive/2012/01/12/2320505.html