谷歌機器人 -- 多麼神奇的夢幻之舟!他瞭解我們的靈魂和各個組成部分。或許他並不尋求什麼獨一無二的東西;他閱覽過其它數十億個網站(雖然我們也與其他搜索引擎機器人分享自己的數據 ),但是就在今晚,作為網站和谷歌機器人,我們將真正地瞭解對方。. W9 A) a" X! ~4 j* H
6 O/ Y3 E- f9 L8 G7 q6 G" q我知道第一次約會的時候,過分地分析從來就不是什麼好主意。我們將通過一系列的文章,一點點地瞭解谷歌機器人:
8 q) C, F, {# @" i( ?& o) t. ]: u0 E, L5 I3 J7 \2 C3 j
我們的第一次約會(就在今晚):谷歌機器人發出的數據標頭和他所留意到的文件格式是否適於被進行壓縮處理;
) f# N* E; O' m: S判斷他的反應:響應代碼(301s、302s),他如何處理重定向和If-Modified-Since;
- a4 H; [ r+ g下一步:隨著鏈接,讓他爬行得更快或者更慢(這樣他就不會興奮地過了頭)。# o' I* t. S" U7 q P* h+ o
今晚只是我們的第一次約會……
$ v% y0 @2 h8 H5 t& s
4 \& k4 ?9 W8 S; L: a***************4 e6 ? w4 V; \, b5 A0 {# _% W% x
谷歌機器人: 命令正確應答 [4 p- Q& o" D
網站: 谷歌機器人,你來了!
( l. l9 V' a# P谷歌機器人:是的,我來了!. I5 o' V0 S& A
0 `$ a3 ^1 J9 k( A- L
5 ~- g, V: \3 ]0 H/ b- \, qGET / HTTP/1.1
W# G( \* Y9 R( t0 \Host: example.com
" V. [, k1 @3 z2 h0 ?Connection: Keep-alive* ^, i+ A: V/ M% h% F
Accept: */*: U- K7 q% y u9 K/ o: h
From: googlebot(at)googlebot.com- K) ]8 e7 t9 T4 K2 c) C' ~' u
User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)% n( ~1 C5 h7 ] O2 i
Accept-Encoding: gzip,deflate4 k0 q) {$ \! w$ r
5 A! ^, U( T: D3 B- L' X
# R% Y; f2 ]) P+ K網站: 這些標頭太炫了!無論我的網站在美國、亞洲還是歐洲,你都用同樣的標頭爬行嗎?你曾經用過其他標頭嗎?9 g% ?4 k( X: Z8 D
1 r: h9 A* l3 y. p& P: m
' v: |1 u2 s" z/ Y& v/ `谷歌機器人: 一般而言,我在全球各地所用的標頭都保持一致。我試圖從一個網站默認的語言和設定出發,搞清楚一個網頁究竟長得什麼樣。有時候人們的用戶代理各不相同,例如Adsense讀取使用的是「Mediapartners-Google」:% l6 y4 f) k b+ J S" O" ]6 T
User-Agent: Mediapartners-Google& s! F; d- K0 A* O
9 @' n( }( l" a8 F' u
或者對於圖像搜索:
+ h9 H3 w8 N# `$ [! }$ kUser-Agent: Googlebot-Image/1.02 A+ ^9 G' {, E
}$ Y) \7 l# s
無線讀取的用戶代理因運營商而異,而谷歌閱讀器RSS讀取則包含了訂閱者數量等額外信息。# D' r! ~8 z H" t. D
* }% V' v1 A. F! k. k我通常會避免Cookies(因此不存在所謂「Cookie:」標頭),因為我並不希望與具體對話有關的信息對內容產生太大的影響。此外,如果某個服務器在動態URL而不是Cookies上使用對話ID,通常我都能識別出來,這樣就不用因為每次對話ID的不同而成千上萬遍地重複爬行同一個網頁。 Y7 w+ p. p6 F2 _5 _) l, w9 L
% |1 U5 J6 d+ B n& C* P6 b網站:我的結構非常複雜。我是用許多類型的文件。你的標頭說:「Accept:*/*」。你會對所有的URL進行收錄,還是自動過濾某些文件擴展名? 8 }0 p5 c% y# T
- y2 s5 q% l! Y z# F3 o5 P, M f8 ~9 c# t" V- P3 ^" ]6 E
谷歌機器人:這要取決於我想找什麼。9 g5 B- Y0 l! l- \4 {+ _8 P
& }( n$ c3 ^) a. ~( A/ l
如果我只是對常規的Web搜索進行檢索,當我看到指向MP3和視頻內容的鏈接,我可能不會下載這些東西。類似地,如果我看到了一個JPG文件,處理方法自然 就與HTML或者PDF鏈接有所區別。例如JPG 的變動頻率往往比HTML低很多,所以我不太經常檢查JPG的變動,以節約帶寬。同時,如果我為谷歌學術搜索尋找鏈接,那麼我對PDF文章的興趣就會遠遠高於對JPG文件的興趣。對於學者而言,下載塗鴉繪畫(例如JPG),或者是關於小狗玩滑板的視頻,是容易讓他們分散注意力的,你說對嗎?5 Z7 T3 `4 X$ r% ~% h
4 a5 d" B; H- e& F) i網站:沒錯,他們可能會覺得被打擾到了。你的敬業精神令我佩服得五體投地。我自己就喜歡塗鴉繪畫(JPG),很難抗拒它們的誘惑力。
1 w( a! A# I- P. O: Z2 s9 a2 D5 j$ g- w. i8 _# I6 X
谷歌機器人:我也一樣。實際上我並不是一直都在做學問。如果我為搜索圖像而爬行,就會對JPG非常感興趣,碰到新聞,我會花大力氣考察HTML和它們附近的圖像。& H$ ?3 t2 w( v H8 P. k1 L1 P
: L' H1 A+ H) G" V+ ^$ F還有很多擴展名,例如exe、dll、zip、dmg等,它們對於搜索引擎而言,既數量龐大,又沒有多大用處。
! {4 S2 |) i% L! B% I) L a7 n% W5 Y* J; C" G
" X% ~) V! y' T/ O& N網站:如果你看到我的URL「http://www.example.com/page1.LOL111」,(嗚噎著說)你會不會只是因為裡面包含著未知的文件擴展名就把它拒之門外呢?
# _# M% P) A& ` ?. I6 `2 B1 T+ E- C Y* h8 }) F" `
6 N# N3 `! w' k$ j; }% C2 b谷歌機器人: 網站老兄,讓我給你講點背景知識吧。一個文件真正下載完成後,我會使用「內容—類別」(Content-Type)標頭來檢查它屬於HTML、圖像、文本還是別的什麼東西。如果它是PDF、Word文檔或Excel工作表等特殊的數據類型,我會確認它的格式是否合法有效,並從中抽取文本內容。但是你永遠也不能確定裡面是否含有病毒。但是如果文檔或數據類型混亂不清,我除了把它們扔掉之外,也沒有什麼更好的辦法。$ S p5 U6 C( u4 T3 h+ ?) k @
7 X& w9 F: g% l6 N) h Y: a
所以,如果我爬行你的「http://www.example.com/page1.LOL111」URL並發現未知文件擴展名時,我可能會首先把它下載。 如果我從標頭中無法弄清內容類型,或者它屬於我們拒絕檢索的文件格式(例如MP3),那麼只能把它放在一邊了。除此之外,我們會接著對文件進行爬行。0 O2 C; S o4 ]' b( L
7 K8 J; n; I; E# p: q
! V/ b6 s9 `. X0 O' ^: ` e網站:谷歌機器人,我很抱歉對你的工作風格「雞蛋裡挑骨頭」,但我注意到你的「Accept-Encoding」標頭這樣說:
, d; t) s& H+ z; A+ l" ~Accept-Encoding: gzip,deflate
?5 t$ E# K$ l" I1 \& t+ d F+ g5 D6 d3 {9 \
你能跟我說說這些標頭是怎麼回事嗎?7 T$ `5 y7 g+ E$ }5 K' p
- t- C' |- ~0 A
s, o" l) G' {
谷歌機器人:當然。所有的主流搜索引擎和WEB瀏覽器都支持對內容進行gzip壓縮,以節約帶寬。你或許還會碰到其它的一些類型,例如「x-gzip」(與「gzip」相同),「deflate」(我們也支持它)和「identity」(不支持)。
2 c; a2 u4 Q: G/ g! i5 l! J5 P$ N
; U8 J( A7 `8 N$ X2 x. X網站:你能更詳細地說說文件壓縮和「Accept-Encoding: gzip,deflate」嗎?我的許多URL都包含尺寸很大的Flash文件和美妙的圖像,不僅僅是HTML。如果我把一個比較大的文件加以壓縮,會不會有助於你更迅速地爬行呢?! e8 v3 w) M# y! B2 U
4 x6 Y" n8 p) @8 M) B
% p6 c2 t. p- T* [
谷歌機器人:對於這個問題,並沒有一個簡單的答案。首先,swf(Flash)、jpg、png、gif和pdf等文件格式本身已經是壓縮過的了(而且還有專門的Flash 優化器)。
$ K- h" V6 H3 T+ x, Y# N
g9 x7 v: C$ N& J; V% b7 Y網站:或許我已經把自己的Flash文件進行了壓縮,自己還不知道。很顯然,我的效率很高嘍。
2 Q0 N+ E2 P, F7 K
9 s% d, h" H, K4 Y" R9 z谷歌機器人:Apache和IIS都提供了選項,允許進行gzip和deflate壓縮,當然,節省帶寬的代價是對CPU資源的更多消耗。一般情況下,這項功能只適用於比較容易壓縮的文件,例如文本HTML/CSS/PHP內容等。而且,只有在用戶的瀏覽器或者我(搜索引擎機器人)允許的情況下才可以使用。 就我個人而言,更傾向於「gzip」而不是「deflate」。Gzip的編碼過程相對可靠一些,因為它不斷地進行加和檢查,並且保持完整的標頭,不像 「deflate」那樣需要我在工作中不斷推測。除此之外,這兩種程序的壓縮算法語言都很相似。
" n% `: t1 Z3 ~! J5 h; g- f! W
9 p; c; R' T% r* F) s" k5 v7 V如果你的服務器上有閒置的CPU資源,可以嘗試進行壓縮(鏈接:Apache, IIS)。但是,如果你提供的是動態內容,而且服務器的CPU已經處於滿負荷狀態,我建議你還是不要這樣做。. Y6 N3 s8 a% Q @: l# r
/ i! u; H5 r6 U5 P. q! m
( ?) F- r$ A* p. {: }! {6 i網站:很長見識。我很高興今晚你能來看我。感謝老天爺,我的robots.txt文件允許你能來。這個文件有時候就像對自己的子女過分保護的父母。
2 t+ {9 j. u' X" }& i; Y1 m' J) a2 V" X( s$ W
' ?7 n9 o6 k1 q/ n: F; B8 U f/ U
谷歌機器人:說到這裡,該見見父母大人了——它就是robots.txt。我曾經見過不少發瘋的「父母」。其中有些實際上只是HTML錯誤信息網頁,而不是有效的robots.txt。有些文件裡充滿了無窮無盡的重定向,而且可能指向完全不相關的站點。另外一些體積龐大,含有成千上萬條單獨成行、各不相同的 URL。下面就是其中的一種有副作用的文件模式,在通常情況下,這個站點是希望我去爬行它的內容的:
- l3 u! f. @. {% y% E; HUser-Agent: *+ V, Y. |# c+ i! X0 w/ z
Allow: / D# @% m2 H8 U3 m7 s/ m
0 P5 o$ `# `9 i. l! ?9 M: |- c
然而,在某個用戶流量的高峰時段,這個站點轉而將它的robots.txt切換到限制性極強的機制上:) q7 |1 K+ I( t" W" X& C
# Can you go away for a while? I'll let you back
, t- g& p- p/ D, ^2 @# again in the future. Really, I promise!* H7 |2 Z) i, U5 L
User-Agent: *
+ b% F2 L8 e* s1 E' b iDisallow: /5 h4 _2 c2 r: r
: p1 m" N( y+ o# _ T1 M上述robots.txt文件切換的問題在於,一旦我看到這種限制性很強的robots.txt,有可能使我不得不把索引中已經爬行的該網站內容捨棄掉。當我再次被批准進入這個站點的時候,我不得不將原先的許多內容重新爬行一遍,至少會暫時出現503錯誤相應代碼。/ R& @3 V, o4 s
f# I+ w5 U; p: |& a0 V+ R+ ~一 般來說,我每天只能重新檢查一次robots.txt(否則,在許多虛擬主機站點上,我會將一大部分時間花在讀取robots.txt文件上,要知道沒有 多少約會對像喜歡如此頻繁地拜見對方父母的)。站長們通過robots.txt 切換的方式來控制爬行頻率是有副作用的,更好的辦法是用網站管理員玩具將爬行頻率調至「較低」即可。
7 q6 b9 E! Z* c6 @. k5 ]8 A. M0 b" U$ }; X7 F
6 k3 b+ T) V" l3 F谷歌機器人: 網站老兄,謝謝你提出的這些問題,你一直做得很不錯,但我現在不得不說「再見,我的愛人」 |
|