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]轉帳進行捐款。