爬虫选取策略主要解决抓取什么样的url,什么样的url不需要抓取。筛选主要关注的有两点。一是选择优质的url进行抓取。二是避免重复的抓取以节约抓取。下面介绍下相关的策略。
Pagerank
Pagerank(http://baike.baidu.com/view/844648.htm?fromId=1518) 是Google的专有算法,是用来衡量特定网页相对于搜索引擎中的其他网页的重要程度。
Pagerank的大致思想为利用网页间的链接指向关系来表示网页的重要程度。
对于不同的搜索引擎,其实现会有不同。关于Pagerank可以参考:http://blog.codinglabs.org/articles/intro-to-pagerank.html。在此不再阐述。
另外由于Pagerank依赖网页间的互相指向关系,而爬虫在抓取时一般都是从其父页面获取指向子页面的链接关系,因此一般爬虫主要利用父页面来计算子页面。
另外选择优质的url还可以根据链接距离站点首页的深度(比如从首页发现的链接一般更重要),链接在页面中的位置(比如位于页面正文部位的链接和位于页面侧边栏的链接的重要性就不同)。新发现的url优先抓取等。
Url规格化
一、保留语义的规范化
在RFC3986: http://tools.ietf.org/html/rfc3986 中
1、协议和host的大小写转化:这些是大小写不敏感的,通常都转换为小写的表示。 如: HTTP://www.Example.com/ → http://www.example.com/
2、转义字符的大写字母:%字符是大小写敏感的,都转换为大写表示 如: http://www.example.com/a%c2%b1b → http://www.example.com/a%C2%B1b
3、解码非预留的字符
如: http://www.example.com/%7Eusername/ → http://www.example.com/~username/
4、移除默认端口
如: http://www.example.com:80/bar.html → http://www.example.com/bar.html
二、常用保留语义的规范化
在RFC3986: http://tools.ietf.org/html/rfc3986 中,但是不是标准
1、添加结尾的 /
如: http://www.example.com/alice → http://www.example.com/alice/
2、取出点好
如: http://www.example.com/../a/b/../c/./d.html → http://www.example.com/a/c/d.html
三、改变语义的规范化
1、移除目录索引
如:http://www.example.com/default.asp → http://www.example.com/ http://www.example.com/a/index.html → http://www.example.com/a/
2、去除片段
如: http://www.example.com/bar.html#section1 → http://www.example.com/bar.html
3、用domain替换IP
如: http://208.77.188.166/ → http://www.example.com/
4、限定的协议
如: https://www.example.com/ → http://www.example.com/
5、去除重复的斜杠
如: http://www.example.com/foo//bar.html → http://www.example.com/foo/bar.html
6、在domain前面去除或添加www
如: http://www.example.com/ → http://example.com/
7、问答参数的排序
如: http://www.example.com/display?lang=en&article=fred → http://www.example.com/display?article=fred&lang=en
注: 参数的顺序也许是有意义的,RFC并未规定
8、去除没用的参数
如: http://www.example.com/display?id=123&fakefoo=fakebar → http://www.example.com/display?id=123
注:没有值的变量未必就是没用的变量
9、取出没用的查询参数: 即有没有都一样的
如: http://www.example.com/display?id=&sort=ascending → http://www.example.com/display
10、去除没有查询参数的问号
如: http://www.example.com/display? → http://www.example.com/display
注:上面提到的一些规格化的方法可供参考。规格化的方式是为了让表示同一的网页的url使用统一的方式表示,以节约抓取资源。只要系统中都是用同一种规格化方式即可。没有严格的规格化要求。
同名站
同名站是指站点的结构完全相同。但是使用不同的域名。这个情况比较类似于站点域名修改后,同时支持新旧域名。此时,只需要按照一种域名对站点抓取即可。否则,是一种抓取资源的浪费,同时可能会加大站点的访问压力。挖掘的方式可以采取对站点计算相似度、
计算站点首页相似度等方式。
Spam
spam指那些无用的url。爬虫是为了爬取所需的url的,根据自己的产品定位和数据需求,有些数据是根本不需要的。因此尽量减少这类数据的抓取对于帮助我们节约抓取资源也是很有帮助的。比如如果我们只关注网页资源,那么从网页中抽取的图片链接的url就可以过滤掉,不需要对其进行抓取。可以通过对这样的数据提取其url的特征形成URL pattern的配置以帮助我们过滤。同时可以结合数据挖掘的相关技术从已经抓取的数据中挖掘住垃圾数据的特征,来帮助我们减少后续垃圾数据的抓取。