大家好,请教一个与爬虫相关的问题。
目前我的需求是对固定的URL上面的资源抓取网页,保存为本地文件。最后对文件进行全文索引。
(每年定期更新,后台执行。数据记录大概有10-20w条)
我想到的几个技术点是:
1.多线程抓取
2.全文索引
技术点
线程池+httpclient+lucene
问题:
抓取效率如何保证?任务队列怎么实现。怎么方法把任务拆分,线程数量有限。谢谢大家。
大家好,请教一个与爬虫相关的问题。
目前我的需求是对固定的URL上面的资源抓取网页,保存为本地文件。最后对文件进行全文索引。
(每年定期更新,后台执行。数据记录大概有10-20w条)
我想到的几个技术点是:
1.多线程抓取
2.全文索引
技术点
线程池+httpclient+lucene
问题:
抓取效率如何保证?任务队列怎么实现。怎么方法把任务拆分,线程数量有限。谢谢大家。
然后开启线程去抓取。
当所有任务执行成功后,最后使用lucene建立索引。
大家觉得正确嘛?谢谢
单靠队列其实还不够,要考虑url去重的问题,可以用BlockingQueue做url缓存,各个线程爬到新url后先写到队列中,然后队列线程来控制队列中的url异步写入url数据库,比如说Berkeley DB,这时可以做个布隆过滤器去重,这样不会阻碍爬虫线程继续从url库中取url继续爬
建议你把上面这个问题简化为 “开源网页爬虫(线程池+httpclient) + lucene”。
开源网页爬虫网上有太多了。目前我自己在用crawler4j,支持多线程爬取,有源码扩展方便,效果还不错。