爬行和抓取是搜索引擎工作的第一步,完成数据收集的任务。
% E8 C. ?) _& g7 f6 G' X1. 蜘蛛
1 d+ H2 Z. ?1 H1 E9 N# F 搜索引擎用来爬行和访问而面的程序被称为蜘蛛,也称为机器人7 P' a8 T! C3 Y( y3 [8 x
搜索引擎蜘蛛访问网站页面时类似于普通用户使用的浏览器,蜘蛛程序发出页面访问请求后,服务器返回HTML代码,蜘蛛程序把收到的代码存入原始页面数据库,搜索引擎为了提高爬行和抓取速度,都使用多个蜘蛛并发布爬行。: `) q; c- X, u0 ^
蜘蛛访问任何一个网站时,都会先访问网站根目录下的robots.txt文件,如果robots.txt文件禁止搜索引擎抓取某些文件或目录,蜘蛛将遵守协议,不抓取被禁止访问的网址。
- s* d( G; u& R F) Y# V+ {% r 和浏览器一样,搜索引擎蜘蛛也有标明自已身分的代理名称,站长可以在日志文件中看到搜索引擎的特定代理名称,从而辩别搜索引擎蜘蛛。 e6 w2 f3 S3 b
. b% L& W) w C1 {6 Z
2. 跟踪链接
4 Y& Q0 b6 P; l4 [6 ]! B 为了抓取网上尽量多的页面,搜索引擎蜘蛛会跟踪页面上的链接,从一个页面爬到下一个页面,就好像蜘蛛在蜘蛛网上爬行那样,这也就是搜索引擎蜘蛛这个名称的由来。3 p7 \; n9 P* o) A8 f; s
整个互联网是由相互链接的网站及页面组成的。从理论上来说 ,蜘蛛从任何一个页面出发,顺着链接都可以爬行到网上的所有页面,当然,由于网站及页面链接结构异常复杂,蜘蛛需要采取一定的爬行策略才能遍历网上所有的页面。+ P3 z. q! @& Q, v `- `
3 X3 {5 a* _# j) L1 @7 C: e& T" ? 最简单的爬行遍历策略分为两种,一种是深度优先,另一种是广度优先。8 p1 L9 L9 F9 r1 d" I4 G
所谓深度优先,指的是蜘蛛沿着发现的链接一直向前爬行,直到前面再也没有其他链接,然后返回到第一页面,沿着另一个链接一直往前爬行。
. m0 e7 U! ^; R4 |1 e0 K5 }2 ?: N0 [# a; ]8 D. N& r* B
如果2-20所示,蜘蛛跟踪链接,从A页面爬行到A1.A2.A3.A4.到A4页面后,已经没有其它链接可以跟踪就返回A页面,顺着页面上的另一个链接,爬行到B1,B2.B3.B4.在深度优先策略中,蜘蛛一直爬到无法再向前,才返回爬另一条线。
6 h, x5 n" }/ p3 Q
5 a1 r) Z8 p; |( j" U
百度蜘蛛的爬行和抓取
& K: q- I7 {; `, P) ^- h- W( O
/ A: @4 p) T0 F h3 |3 h: r: z: I 广度优先是指蜘蛛在一个页面上发现多个链接旮,不是顺着一个链接姨直向前,而是把页面上所有第一层链接都爬一遍,然后再沿着第二层页面上发现的链接爬向第三层页面。
" f! {6 d" V5 S% d+ d) y如图2-21所示,蜘蛛从A页面顺着链接爬行到A1,B1,C1页面,直到A1页面上的所有链接都爬行完,然后再从A1页面发现的下一层链接,爬行到A2.A3.A4.……。页面
, y% r7 U! l- w. p0 ^; p& oi
百度蜘蛛的爬行和抓取
) o) Q1 n8 T" W L8 F
9 g7 ~+ p! Y7 i+ D/ e$ Y, ~' |0 p6 s, E3 n
从理论上来说,无论是深度优先还是广度优先,只要给蜘蛛足够的时间,都能爬完整个互联网。在实际工作中,蜘蛛的带宽资源,时间都不是无限的,也不可能爬完所有的页面。实际上最大的搜索引擎也只是爬行和收录了互联网的一小部分。
7 H, D K1 X+ L3 a) L/ W) a9 e4 n 深度优先和广度优先通常是混合使用的,这样即可以照顾到尽量多的网站(广度优先),也能照顾到一部分网站的内页(深度优先)。
; K, ]" O. N9 l, |& c( T! e
2 S: [; {: }1 }# k" n6 Z" L2 R |