Storm【实践系列-如何写一个爬虫- 对于Protocol进行的封装】

本章描述:对于Protocol的封装

package com.digitalpebble.storm.crawler.fetcher;

import com.digitalpebble.storm.crawler.util.Configuration;

public interface Protocol {

    public ProtocolResponse getProtocolOutput(String url) throws Exception;
    
    public void configure(Configuration conf);
}

对于ProtoclFactory的封装

package com.digitalpebble.storm.crawler.fetcher;

import java.net.URL;
import java.util.WeakHashMap;

import com.digitalpebble.storm.crawler.fetcher.asynchttpclient.AHProtocol;
import com.digitalpebble.storm.crawler.util.Configuration;

/**
 * @author Yin Shuai
 *
 */
public class ProtocolFactory {

    private final Configuration config;

    private final WeakHashMap<String, Protocol> cache = new WeakHashMap<String, Protocol>();

	public ProtocolFactory(Configuration conf) {
        config = conf;
    }

    /** Returns an instance of the protocol to use for a given URL **/
    public synchronized Protocol getProtocol(URL url) {
        // get the protocol
        String protocol = url.getProtocol();
        Protocol pp = cache.get(protocol);
        if (pp != null)
            return pp;
        
        // yuk! hardcoded for now
        pp = new AHProtocol();
        pp.configure(config);
        cache.put(protocol,pp);
        return pp;
    }

}

对于ProtocolResponse的封装

package com.digitalpebble.storm.crawler.fetcher;

import java.util.HashMap;

public class ProtocolResponse {

    final byte[] content;
    final int statusCode;
    final HashMap<String, String[]> metadata;

    public ProtocolResponse(byte[] c, int s, HashMap<String, String[]> md){
        content = c;
        statusCode = s;
        metadata = md;
    }

    public byte[] getContent() {
        return content;
    }

    public int getStatusCode() {
        return statusCode;
    }

    public HashMap<String, String[]> getMetadata() {
        return metadata;
    }

}

Storm【实践系列-如何写一个爬虫- 对于Protocol进行的封装】

时间: 2024-10-02 04:43:15

Storm【实践系列-如何写一个爬虫- 对于Protocol进行的封装】的相关文章

Storm【实践系列-如何写一个爬虫- Metric 系列】1

package com.digitalpebble.storm.crawler; import backtype.storm.Config; import backtype.storm.metric.MetricsConsumerBolt; import backtype.storm.metric.api.IMetricsConsumer; import backtype.storm.task.IErrorReporter; import backtype.storm.task.OutputCo

Storm【实践系列-如何写一个爬虫】 - ParserBolt

阅读背景: 如果您对爬虫,或则web前端不够了解,请自行google. 代码前提:您需要参阅本ID 所写的前面两篇博文:  Storm[实践系列-如何写一个爬虫] - Fetcher 本章主题: ParserBolt 如何完成的解析,并且如何从前面的组件得到数据,并emit出去. 博文流程:  博文将整个 爬虫系列公开,其过程为: 1 : 代码实现. 2 : 对代码的细节进行解析. 3 : 对真个设计进行回顾,并作总结. 如果您在参看本ID的博文的过程之中,只存在流程 1.那么请继续等待.一旦公

通过写一个爬虫来学习大前端(草稿)

## 为什么说写爬虫能够磨练编程技艺呢?- 我们平时很不喜欢看别人的网站,通过写爬虫我们可以快速的对别人的网站布局有一个更好的理解- 可以提高我们的正则的水平- 提高http协议的水平- 我们可以充分的利用node的异步的优势- 可以玩一下一些好玩的node中间件- 考虑编码的问题- 我们会采用angular和bootstrap作为前端框架- 使用angular-router,做一个列表页和内容页- 熟悉一些开源工具像bower+npm+git- 当然这只是一个练习,我们把数据抓取下来之后,直接

用Scrapy写一个爬虫

昨天用python谢了一个简单爬虫,抓取页面图片: 但实际用到的爬虫需要处理很多复杂的环境,也需要更加的智能,重复发明轮子的事情不能干, 再说python向来以爬虫作为其擅长的一个领域,想必有许多成熟的第三方框架,百度后选用了 Scrapy作为平台构建复杂爬虫. Scarpy的下载安装不必细说,话说当前只支持python2.x版本,很郁闷,下载安装了python2.7. 安装完后,按照<Scrapy Tutorial>和Scrapy at a glance两篇帖子作为学习范本. 概念及步骤简要

自己写一个爬虫 copider

copider 模仿scrapy的一些写法,当然我这个是单进程的,不是异步的 1.目录 copider/copider.py #coding=utf-8 ''' Created on 2015年10月8日 @author: snt1 ''' import urllib2 import lxml.html import StringIO class Spider(object): def __init__(self, url, meta=None): self.URL = url self.MET

用Python写一个最简单的网络爬虫

什么是网络爬虫?这是百度百科的解释: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫. 爬虫可以做什么?爬虫可以帮助我们在茫茫互联网中爬取我们需要的特定数据,这个特定数据可以是任何想获得的数据. 爬虫是一个让人热血的话题,因为当你在写爬虫的时候,你会感觉到自己是在做一件很NB的事,而每当写出一个爬虫,就会在此基础上不断尝试写出更NB的爬虫,有

用Python实现一个爬虫爬取ZINC网站进行生物信息学数据分析

最近接到实验室的导师交给我的一个任务,就是他们手头有很多smile表达式,格式类似这种:C(=C(c1ccccc1)c1ccccc1)c1ccccc1(这是生物信息学中表达小分子结构的一种常用表达式),他们需要对每个smile表达式在ZINC网站(生物信息学数据网站)上进行搜索,然后找到对应的ZINC号.小分子供应商.构象预测等信息.基本步骤如下: 点击查找之后网页就会跳转到详细信息,我们需要获取它的ZINC号.小分子供应商.构象预测.CAS号等信息,如下: 这一套流程要是靠人工手动完成的话有点

筹划开始写一个系列的东西

最近晚上的时间相对来说是比较宽裕的,所以想写一个系列的东西出来,以便于巩固自己当前的知识体系. 目前我的计划如下: 1. WebAPI 系列讲解. 2. Signalr 系列讲解. 3. MySQL数据库系列讲解. 4. ABP框架系列讲解. 5. 自学DDD系列讲解. 6. 敏捷开发之我所见所闻系列讲解. 7. 自学TDD系列讲解. 8. KnockOut.JS系列讲解. 9. 自己读的和技术无关的一些书籍方面的系列. 我非常喜欢研究DDD框架,SOA框架和基于事件消息模型的中间件框架,同时对

也写一个简单的网络爬虫

引子 在cnblogs也混了许久,不过碍于平日工作太忙,一篇随笔也没有写过.最近经常感觉到自己曾经积累过的经验逐步的丢失,于是开通了博客,主要是记录一下自己在业余时间里玩的一些东西. 缘起 言归正传.某次在在某高校网站闲逛,看到了一些有趣的东西想要保存起来,但是却分散在各个页面,难以下手.使用baidu,google却有无法避免的搜索到此站点之外的内容.于是就想如果有一个爬虫,可以抓取指定域名的某些感兴趣的内容,不是很好.在网上简单搜索了一下,简单的都不满意,功能强大的又太复杂,就想自己写一个.