网络爬虫定向抓取漫谈
?
网络爬虫(web crawler)又称为网络蜘蛛(web spider)是一段计算机程序,它从互联网上按照一定的逻辑和算法抓取和下载互联网的网页,是搜索引擎的一个重要组成部分。一般的爬虫从一部分start url开始,按照一定的策略开始爬取,爬取到的新的url在放入到爬取队列之中,然后进行新一轮的爬取,直到抓取完毕为止。
我们看一下crawler一般会遇到什么样的问题吧:
- 抓取的网页量很大
- 网页更新量也很大,一般的网站,比如新闻,电子商务网站,页面基本是实时更新的
- 大部分的网页都是动态的,多媒体,或者封闭的(facebook)
海量网页的存在就意味着在一定时间之内,抓取只能的抓取其中的一部分,因此需要定义清楚抓取的优先级;网页更新的频繁,也就意味着需要抓取最新的网页和保证链接的有效性,因此一个更有可能带来新网页的列表页显得尤为重要;对于新闻网站,新的网站一般出现在首页,或者在指定的分类网页,但是对于淘宝来说,商品的更新就很难估计了;动态网页怎么办呢?现在的网页大都有JS和AJAX,抓取已经不是简单的执行wget下载,现代的网页结构需要我们的爬虫更加智能,需要更灵活的应对网页的各种情况。
因此,对一个通用的爬虫个,我们要定义
- 抓取策略,那些网页是我们需要去下载的,那些是无需下载的,那些网页是我们优先下载的,定义清楚之后,能节省很多无谓的爬取
- 更新策略,监控列表页来发现新的页面;定期check页面是否过期等等
- 抽取策略,我们应该如何的从网页中抽取我们想要的内容,不仅仅包含最终的目标内容,还有下一步要抓取的url
- 抓取频率,我们需要合理的去下载一个网站,却又不失效率
抓取策略
使用URL的正则特征是一个简单但却很高效的模式;对于定向抓取,一般的网站的URL有一定的特征,比如可能仅仅关心?.html, .htm, .asp, .aspx, .php, .jsp, .jspx类型的网页;或者是如果可以得到目标网站的正则,则可以大大的降低抓取的数量;又或者我们无需关心某一类网页,比如我们不抓取bbs.taobao.com下面的内容;仅仅需要抓取淘宝的商品页面(http://item.taobao.com/item.htm?id=\d+ )。通过URL的正则能极大的降低抓取数量;
也可以通过网页的文本特征来确定;不过要复杂得多了,一般需要一定数量已知页面的训练集合,然后提取页面的文本特征,然后通过向量空间模型或者其其他基于主题词提取的模型计算目标网页和训练集网页的距离,决定是否是目标网页。
更新策略
Freshness:表示抓取到的网页是否已经被修改

Age:表示抓取的网页过期的时间
?
简单几步,我们就可以抓取得到一个站点想要的页面了,并且可以抽取指定xpath的内容。
一个简单的定向爬虫就搭建起来了,关键是一个能够大规模的分布式的爬虫可能是一个挑战,后续再进一步介绍如何在分布式环境进行大规模的抓取,以及抓取遇到的一些更为棘手的问题,see u
原文地址:http://www.searchtb.com/2011/01/an-introduction-to-crawler.html
如有版权问题请与原文作者联系
?