WebCollector自定义http请求

WebCollector可以自定义http请求,WebCollector的http请求由Requester完成,BreadthCrawler和RamCrawler本身就实现了Requester接口,默认情况下它们使用自身作为Requester。

自定义http请求只要override它们的getResponse方法即可。

下面例子代码演示了如何在WebCollector中将部分页面的http请求方式改为POST方法:

import cn.edu.hfut.dmic.webcollector.model.CrawlDatum;
import cn.edu.hfut.dmic.webcollector.model.CrawlDatums;
import cn.edu.hfut.dmic.webcollector.model.Links;
import cn.edu.hfut.dmic.webcollector.model.Page;
import cn.edu.hfut.dmic.webcollector.net.HttpRequest;
import cn.edu.hfut.dmic.webcollector.net.HttpResponse;
import cn.edu.hfut.dmic.webcollector.plugin.berkeley.BreadthCrawler;
import java.net.HttpURLConnection;
import java.net.ProtocolException;

import org.json.JSONObject;

/** * 本教程演示了如何自定义http请求 * * 有些爬取任务中,可能只有部分URL需要使用POST请求,我们可以利用2.20版本中添 加的MetaData功能,来完成POST请求的定制。 * * 使用MetaData除了可以标记URL是否需要使用POST,还可以存储POST所需的参数信息 * * 教程中还演示了如何定制Cookie、User-Agent等http请求头信息 * * WebCollector中已经包含了org.json的jar包 * * @author hu */
public class DemoPostCrawler extends BreadthCrawler {

    public DemoPostCrawler(String crawlPath, boolean autoParse) {
        super(crawlPath, autoParse);
    }

    @Override
    public HttpResponse getResponse(CrawlDatum crawlDatum) throws Exception {
        HttpRequest request = new HttpRequest(crawlDatum.getUrl());

        request.setMethod(crawlDatum.getMetaData("method"));
        String outputData=crawlDatum.getMetaData("outputData");
        if(outputData!=null){
            request.setOutputData(outputData.getBytes("utf-8"));
        }
        return request.getResponse();
        /* //通过下面方式可以设置Cookie、User-Agent等http请求头信息 request.setCookie("xxxxxxxxxxxxxx"); request.setUserAgent("WebCollector"); request.addHeader("xxx", "xxxxxxxxx"); */
    }

    @Override
    public void visit(Page page, CrawlDatums next) {
        String jsonStr = page.getHtml();
        JSONObject json = new JSONObject(jsonStr);
        System.out.println("JSON信息:" + json);
    }


    /** * 假设我们要爬取三个链接 1)http://www.A.com/index.php 需要POST,并且需要附带数据id=a * 2)http://www.B.com/index.php?id=b 需要POST,不需要附带数据 3)http://www.C.com/ * 需要GET * * @param args * @throws Exception */
    public static void main(String[] args) throws Exception {

        DemoPostCrawler crawler = new DemoPostCrawler("json_crawler", true);
        crawler.addSeed(new CrawlDatum("http://www.A.com/index.php")
                .putMetaData("method", "POST")
                .putMetaData("outputData", "id=a"));
        crawler.addSeed(new CrawlDatum("http://www.B.com/index.php")
                .putMetaData("method", "POST"));
        crawler.addSeed(new CrawlDatum("http://www.C.com/index.php")
                .putMetaData("method", "GET"));

        crawler.start(1);
    }

}

通过捐款支持WebCollector

维护WebCollector及教程需要花费较大的时间和精力,如果你喜欢WebCollector的话,欢迎通过捐款的方式,支持开发者的工作,非常感谢!

你可以使用支付宝钱包扫描下方的二维码进行捐款, 或者通过向支付宝帐号 [email protected]转帐进行捐款。

WebCollector自定义http请求_第1张图片

你可能感兴趣的:(webcollector)