爬虫在抓取一个页面后一般有两个任务,一个是解析页面内容,一个是将需要继续抓取的url放入队列继续抓取。因此,当爬取的网页很多的情况下,待抓取url的管理也是爬虫框架需要解决的问题。本文主要说的是gecco爬虫框架的队列和线程模型。
如果想通过多线程提高爬虫的效率就需要想办法将请求放入初始请求队列。我们可以先通过一个爬虫引擎将待抓取的请求保存起来。另外一个爬虫引擎以第一个爬虫引擎获取的请求作为初始请求开启多线程运行。简单说就是初始请求也是可以抓取出来的,并不一定非要写死。下面是jd采用多线程抓取的一段代码,全部代码已经上传github。
?
//先获取分类列表,放入AllSortPipeline.sortRequests
HttpGetRequest start = new HttpGetRequest("http://www.jd.com/allSort.aspx");
start.setCharset("GBK");
GeccoEngine.create()
.classpath("com.geccocrawler.gecco.demo.jd")
.start(start)
.run();
//分类列表下的商品列表采用3线程抓取
GeccoEngine.create()
.classpath("com.geccocrawler.gecco.demo.jd")
//从上面的GeccoEngine获取初始请求
.start(AllSortPipeline.sortRequests)
.thread(5)
.interval(2000)
.start();
原文:http://xtuhcy.iteye.com/blog/2303952