首页 > 教育学习 > 为什么 > 如何设计一个定向Web爬虫?

如何设计一个定向Web爬虫?
2012-01-19 17:42:50   来源:   点击:

    如何设计一个定向Web爬虫?目前的做法:1.模块分为:html解析,html下载中心,下载器2.html解析 负责: 发起下载任务,接收下载后的html并进行逻辑处理 html下载中心 负责:接收下载任务,并分发给多个下载器,接收下载器返回的HTML,返回HTML给解析器3.如果有图片要下载的话,要将图片的二进制数据返回到htnl解析器现在的我的疑惑是:这样一来,是不是数据传输过于冗余?能有比较好的设计吗?

    5 个答案

    • 答案 1:

      从整体搜索引擎角度,分成三个子系统:爬虫(URL管理和调度下载解析等)、索引(用于全文检索)、存储(解析后的内容和快照等);爬虫子系统部分,又分为四个组件:Seeder- > Manager- > Harvester- > Collector(- > Seeder).1) Seeder负责URL管理,也就是定向网站种子url,以及曾经抓过的所有url,可扩展存储网页指纹,历史抓取信息等2) Manager负责调度,根据你的抓取策略(定时、增量、随机等)从Seeder调取url生成抓取任务;3) Harvester有多个,竞争得到抓取任务并专心下载,下载后内容传递给Collector;4) Collector有俩任务,解析html、搜集新链接,并把解析后的内容根据需要传递给索引系统和存储系统,把搜集的新连接传递给Seeder模块。这个设计是参考了国外一些论文实现的,个人感觉有几个好处:a) 四个组件组成良性循环,结构清晰,分工和扩展容易;b) Seeder+Manager 负责长期目标:指定的下载策略控制,根据不同的适用场景可以由不同的算法;c) Harvester+Collector 负责短期目标:充分发挥计算机资源(CPU/Memory/IO/网络)完成下载和内容解析;几点说明:1) URL去重可以放到Seeder来做,一个Bloomfilter就行;2) Harvester网页下载实现可以用一些高效异步IO,比如java的NIO等,单个线程同时发起上千个并发下载没有任何问题;3) Collecter网页解析主要是个浪费CPU的事情,一般只能开个线程池并发处理,为了提高解析效率,不在乎链接发现很全的情况下,可以考虑正则表达式解析(非常快,推荐);如果是图片的话,Collector就好办了,判断下载完的资源如果是图片,直接到存储系统。当然里面还有很多细节话题需要考虑,在此先一并忽略了~~
    • 答案 2:

      不太清楚定向爬虫,没有做过;但是感觉可以把爬到的文档在数据库中根据URL建立索引,爬过的就不用再爬了;HTML解析上,也可以用广度优先(而不是深度优先),如果目录比较深的网站可以截断
    • 答案 3:

      赞同刘嘉瑜的回答,或者你可以用队列来做任务调度保证一个url只处理一次可以参照一下一些爬虫框架的设计,比如http://scrapy.org/
    • 答案 4:

      来一个全局的消重吧,要简单的话可以用bloomfilter,不过不支持删除操作,会存在错误率。稍微带逻辑可以redis试试,能够支持过期这样的操作。
    • 答案 5:

      最近看到的一个淘宝的搜索架构的文章blog.nosqlfan.com/html...

相关热词搜索:

上一篇:TermKit 这个项目被看好吗?未来能否被取代?
下一篇:C++中vector元素的类型为指针,如何将其赋为NULL?