很多seo想知道“快排”是怎么做的,今天,它來了。
本文將從3個方面講解快排的相關知識。
- 什么是快排?
- 為什么快排那么有效?
- 怎么“開發”一套屬于自己的快排系統?
快排,全稱快速排名?;镜脑砭褪峭ㄟ^大量的模擬普通用戶在搜索引擎中的點擊行為來調整搜索結果中某些頁面的點擊數據,從而使得搜索引擎調整這些頁面的排名,使其能快速的進入到首頁的方法或者技術。
快排一開始主要是從百度著手的,沒辦法,誰讓百度的流量多呢?
快排點擊系統目前主要有3種:
- 互點型:主要就是通過大量的用戶掛機來進行點擊,這類的快排程序好處就是不需要大量的IP資源,因為所有的注冊用戶都自己提供了。用戶只需要登錄軟件掛機即可。目前市面上的這類軟件有:《快排小靈通》就是用的這種方式。
- 自點型:主要就是自主研發,通過分布式服務器,以及大量的代理IP,通過程序的方式來模擬用戶的點擊行為。這也是目前市面上比較流行和燒錢的一種快排系統。效果上也比互點型的更快更好,因為資源的分配上更加自主化。這類系統主要都是由團隊開發,當然了個人的也有。目前主流的開發語言是Python(簡單嘛),當然易語言,Java這些都是可以的。
- 發包型:通過破解百度js加密數據的方式,直接發包給百度。實現低成本的提交資源。畢竟模擬點擊的話需要耗費比較多的服務器資源,發包就會少很多。當然了,目前這種效果具體如何我也不是很清楚哈。等下會給大家演示一下百度都會收到哪些數據包。
這個主要來源于百度的一份專利,當然了,其實目前市面上的所有商業化搜索引擎都有類似的基于用戶點擊行為來調整搜索結果的策略在里面。谷歌近兩年對這方面也是很用心的(據說)。
下面我們一起來看看百度的這份專利:
專利名稱:《一種基于用戶點擊行為的搜索方法及系統》
目前,搜索引擎依據用戶輸入的查詢詞(query)提供相應的搜索結果之前,都會對 搜索結果進行排序處理,用于優化搜索結果,提高用戶體驗?,F有技術中,一般是依據用戶點擊行為對搜索結果進行排序,如果一個搜索結果被越多的用戶選擇,表示這個搜索結果越能滿足用戶的搜索需求,那么這個搜索結果就會在所有搜索結果中排序靠前 ;目前通過 用戶是否點擊了該搜索結果的統一資源定位符(URL,Uniform Resource Locator)以及該 URL 是否滿足用戶搜索需求獲得搜索結果的權重,最后依據權重對搜索結果排序,排序后的搜索結果才會被推送給用戶。
但是,搜索結果頁中除了提供 URL 之外,還會同時提供可直接滿足用戶搜索需求 的摘要文本,例如在搜索結果頁中直接提供詞語的釋義、問題的答復、特定圖片等,對于這 種搜索結果,用戶不需要點擊搜索結果的 URL 就可以直接獲得滿意的答復,如果僅僅依據 用戶是否點擊搜索結果的 URL 來對搜索結果進行排序,將不能向用戶提供滿意的搜索結果,用戶需要在搜索結果頁中瀏覽、篩選后才能找到滿意的搜索結果,因此導致搜索效率較 低,給搜索引擎帶來不必要的負擔,用戶體驗較差。
以上就是專利的背景,下面我們一起來看些有用的東西。
基本思想:依據用戶輸入的查詢詞得到搜索結果 ;統計所述搜索結 的鼠標點擊次數,所述鼠標點擊次數等于鼠標點擊統一資源定位符 URL 次數加上鼠標點擊 摘要文本次數 ;依據所述鼠標點擊次數對搜索結果排序,將排序后的搜索結果提供給用戶。
實現流程步驟如下
接收用戶輸入的 query,得到該 query 的搜索結果。
搜索引擎接收用戶輸入的 query,得到該 query 默認排序后的搜索結果。
統計搜索結果的鼠標點擊次數,所述鼠標點擊次數等于鼠標點擊 URL 次 數加上鼠標點擊摘要文本次數。
對于得到的 query 的搜索結果,統計每個搜索結果的鼠標點擊次數, 鼠標點擊次數等于鼠標點擊 URL 次數加上鼠標點擊摘要文本次數。
統計鼠標點擊 URL 次數的方法為 :搜索引擎可以預先從數據 獲取一段時間內的鼠標點擊日志,鼠標點擊日志中包括用戶標識、點擊的 URL 以及點擊 URL 的時間,依據搜索結果的 URL 以及鼠標點擊日志,統計搜索結果的鼠標點擊 URL 次數 ;其中, 一段時間可以依據需求進行配置,如一天、一周或一個月等。
統計鼠標點擊摘要文本次數的方法為 :query 的搜索結果頁上 對于每個組成元素都有一個唯一路徑,如搜索結果的 URL 和摘要文本都有相應的唯一路徑,在搜索結果頁上對于每個搜索結果都有相應的元素 id.
預設的鼠標腳本代碼會實時記錄用戶鼠標在摘要文本上的動作及該動作的發生 時間,并將記錄摘要文本、鼠標點擊動作及時間的對應關系保存到鼠標軌跡日志中,通過上 述方法得到搜索結果的摘要文本后,依據該摘要文本和鼠標軌跡日志,統計在該摘要文本 上的鼠標點擊次數。
例如,在某個鼠標軌跡日志中找到搜索結果的摘要文本,該鼠標軌跡日志中該摘 要文本對應的動作為鼠標點擊動作(mousedown),就表示該摘要文本被鼠標點擊了 1 次。
依據鼠標點擊次數對搜索結果排序,將排序后的搜索結果提供給用戶。
在統計得到每個搜索結果的鼠標點擊次數后,依據鼠標點擊次數找到滿足預設調整條件的搜索結果,將滿足預設調整條件的搜索結果的排序調前,然后將排序后的搜索結果推送給用戶 ;
預設調整條件為 :搜索結果的鼠標點擊次數大于相鄰的前一個搜索結果的鼠標點擊次數且該搜索結果的結果類型是具有豐富摘要內容的結果類型。
查找滿足預設調整條件的搜索結果的方法為 :對搜索結果進行遍歷,判斷相鄰兩個搜索結果的鼠標點擊次數的大小,如果相鄰兩個搜索結果中,后一個搜索結果的鼠標點擊次數大于前一個搜索結果的鼠標點擊次數,則進一步判斷后一個搜索結果的結果類型是否是具有豐富摘要內容的結果類型,如果是具有豐富摘要內容的結果類型,則該后一個搜索結果滿足預設的調整條件,將該后一個搜索結果的排序位置與前一個搜索結果的排序位置互換,反之,后一個搜索結果不滿足預設的調整條件,繼續遍歷其他搜素結果。
判斷第二個搜索結果的結果類型是否是具有豐富摘要內容的結果類型的方法為 :預先配置具有豐富摘要內容的結果類型與主域名的對應關系,依據 query 的搜索結果的主域名判斷搜索結果的結果類型是否為具有豐富摘要內容的結果類型 ;不同的搜索引擎中具有豐富摘要內容的結果類型不同,一般的,具有豐富摘要內容的結果類型包括詞典、問答頁、地圖等,相應的,詞典的主域名為 dict,問答頁的主域名為 zhidao,地圖的主域名為 map。這里,如果搜索結果的鼠標點擊次數較大,但是排序位置靠后,而比該搜索結果排序位置靠前的搜索結果的鼠標點擊次數較小,如果搜索結果同時具有豐富的摘要內容,則認為需要對該搜索結果進行排序調前,用以需要保證鼠標點擊次數大且具有豐富摘要內容的搜索結果的排序靠前。
例如,在輸入框中輸入的 query 為 doll 時,得到如圖所示的搜索結果頁,依據鼠標 點擊次數對詞典中的搜索結果的排序調前,使得用戶在第一個搜索結果頁就可以通過摘要 文本獲得滿意的搜索結果,不需要瀏覽之后搜索結果頁,也不需要點擊搜索結果的 URL。
或者,在統計得到每個搜索結果的鼠標點擊次數后,依據鼠標點擊次數計算搜索 結果的權重值,依據權重值由大到小的順序對搜索結果排序,將排序后的搜索結果提供給用戶。
這里專利還提供了一個權重計算公式:
該公式中,Ψ i 為搜索結果 i 的權重值,C i 為統計得到的搜索結果 i 的鼠標點擊次 數,S i 表示搜索結果 i 作為鼠標最后點擊的搜索結果的次數,這里,鼠標最后點擊的搜索結果僅僅指鼠標點擊搜索結果的 URL,不包括鼠標點擊搜索結果的摘要文本的情況 ;α 和 β 為預設的調權因子,優選的,α 等于 0.5,β 等于 0.82 ;其中,鼠標點擊日志用于記錄用戶 在某query下點擊的所有URL,依據鼠標點擊日志可以獲得用戶在每個query下最后點擊的 URL,因此依據鼠標點擊日志可以統計搜索結果 i 作為鼠標最后點擊的搜索結果的次數 S i 。
為了提高搜索效率,可以僅調整默認排序中排名靠前的搜索結果的排序,例如,可以依據鼠標點擊次數僅計算默認排序中排名前 10 個搜索結果的權重值,依據計算的權重值對這 10 個搜索結果進行重新排序,其他搜索結果的排序不變 ;或者, 僅判斷排名前 10 個搜索結果中是否有滿足預設調整條件的搜索結果,不對其他搜索結果 進行判斷 ;這里,調整的搜索結果的個數可以依據需求進行動態配置。
從上面這段話可以看出,如果你的網頁在某個詞的排名上越靠前,那么通過點擊的方式提升排名的幾率就越大。這也是為啥目前做快排的說前五頁的效果最好最快的原因。
總結一下,要想后面的排名能夠靠前,那么需要具備以下因素:
- 后面結果的點擊次數要大于前面結果的點擊次數
- 后面結果的結果類型是具有豐富摘要文本的類型,這個其實還要結合具體的query來看的,并不是所有的query的搜索結果都應該具有豐富摘要文本。(為啥詞典、地圖和專業問答類的排名那么靠前也是有原因的)
- 如果搜索query的結果不是具有豐富摘要文本的,那么就通過鼠標點擊次數計算搜索結果權重值。最后再排序,具體參考上面的公式解析。
- 在某個query下的最后點擊的搜索結果的點擊次數對權重的影響很大哦,所以想要讓你們網頁排名靠前,那么就把它作為最后一次點擊的結果吧。
好了,了解的快排的原理,以及背后的專利之后,讓我們一起實際來看看如果自己要做一個快排系統都要些什么吧。
首先我們看看專利中多次提到的記錄用戶的點擊行為日志。百度都記錄了什么東西?
我們在百度里面輸入“seo”,得到如下結果。
我屮艸芔茻,都是做快排的有木有?哈哈,這不是我們研究的重點,我們打開谷歌瀏覽器的開發者工具(F12)或者鼠標右擊,選擇“檢查”,找到network選項。然后我們上下滾動一下頁面,就可以看到這些個玩意。
我們發現,有很多個w.gif的資源被記錄到了。這就有點意思了。點擊去一看究竟吧。
上面這個是請求的URL,我們發現它是https://fclick.baidu.com這個域名,既然有click那基本就沒錯了,就是記錄點擊行為的。一起看看都發送了哪些數據吧。
上面就是請求的參數,大概的說下吧:
- startHeight:是從哪個高度位置開始滾動鼠標的。
- startTime: 從哪個時間戳開始的,這個時間戳是從1970年1月1日到你鼠標滾動發生是經過的毫秒數??梢酝ㄟ^Python的time包來解析出來具體的時間哦。(這里我除了1000,直接用了秒)
- 要獲取毫秒數,直接用time.time()乘以1000即可。
- endHeight:這個就是滾動到哪個位置結束了。
- endTime:這個就是鼠標停止滾動的時間
- scrollTime:滾動了多少毫秒
- scrollLen:滾動了多長的距離
- scrollInter:第一次滾動鼠標,每次滾動該參數都會加1
- scrolldirect:這個似乎都是B
- stayTime:距離上次滾動停留的時間
- startViewZone:這個是開始時的視窗空間
- endViewZone:結束時的視窗空間
- action:鼠標動作,這里是scroll,代表滾動的意思
- adsCmatch:這個不知道是啥,估計是廣告之類的。
- top:這個每個詞都有一個自己的值,同一個詞的值在一個頁面內是一樣的,翻頁之后可能會改變。
- wise:明智程度,10應該是最高的吧,這個似乎都是10,說明是用戶自己滾動的
- bottom:參考top的解析
- tag:這個似乎都是固定值來的,大家可以多試試不同的詞語。
- searchId:每次搜索都不同的,懷疑是16位搜索詞的hash值
- baiduId:目前為空
- _rand:滾動到最后時的時間戳。毫秒數,保留3位小數
以上就是百度記錄用戶滾動行為的相關信息??梢钥吹?,要想通過發包的方式來解決這些數據的話還是比較有技術難度的。需要破解js哈。這里就不展開了,我也不會。
那么點擊行為都記錄了啥,當我們點擊某一條搜索結果的時候,可以看到以下信息。(我點擊了第五頁的第一條結果)
我們點擊某條搜索結果的時候,一共觸發了3條請求。
先看第一條:
看看請求參數吧:
參數解析:
- action: 動作,這里是click,說明是點擊行為
- type:類型,這里是wise,中文意思是明智的,說明這個是用戶明智的選擇么???
- position:點擊了該頁面下的哪條搜索結果,這里我點了第一條
- tag:搜索結果標記吧,估計
- searchId:搜索id
- baiduId:無
- _rand: 時間戳
這條請求其實主要就是記錄了用戶點擊了哪條搜索結果,主要是位置信息。以及點擊發生的時間。
接著來看第二條
請求參數:
好家伙,參數可不少。挑幾個來講講吧。
- q:query 詞,用戶查詢詞
- rsv_xpath: xpath路徑模板,記錄用戶是點擊title的還是點擊縮略圖或者是鏈接位置。目前描述信息點擊是無法跳轉的,但是用戶點擊描述信息也會被記錄的。
上面是點擊描述信息時記錄的用戶行為,可以看出來,也主要是記錄用戶點擊了哪個頁面位置的描述信息。
- title: 點擊的標題內容是什么,對于圖片和鏈接的話就不是顯示中文了,而是顯示對應的信息,具體大家可以自己點擊看看。
- url:目標網頁的加密地址鏈接
- rsv_height,rsv_width:該搜索結果位置的高度和寬度
- rsv_tpl:該搜索結果的模板,se_com_default,這個似乎是正常的排名模板哦。廣告和合作以及開放平臺的都不一樣。
- p1: 這里是指改搜索結果的排名位置,下面的p5也是一樣的
- rsv_srcid:搜索結果模板id標識,這個跟rsv_srcid是配套的,1599似乎是正常的排名
- F到F3參數,不知道是啥,之前好像在哪看到過對應的解析,忘了。
- T:點擊時的時間戳
剩下的參數就不一一展開了,因為開發也用不到,有的呢我也不是很理解具體是什么意思哈。如果哪位大佬知道的歡迎告知。
第三條請求就是為您推薦:
看下請求參數,其實一眼看就知道個大概了,這個主要就是點擊某條搜索結果之后,百度會給你推薦一些詞。也就是
當然了,并不是點擊每條搜索結果都有的,至于為啥。目前沒有具體研究,這個涉及到另外的一個專利,搜索相關推薦,有興趣可以看看。
好了,介紹了那么多,看起來要破解的東西還是蠻多的。但是如果不用發包的方式來模擬點擊的話還是比較好實現的。
這里總結下要開發一個快排程序的需要哪些玩意:
- 編程語言,要會Python,Java,易語言,C#等,都可以哈。這里建議用Python,簡單嘛!
- 要有多款不同版本的瀏覽器的內核,這樣才能加載和執行js。這里可以用谷歌和火狐的內核驅動,IE的驅動等等。谷歌瀏覽器各個版本的內核下載地址:http://npm.taobao.org/mirrors/chromedriver/
- 如何在這些瀏覽器內核上模擬真實的用戶點擊瀏覽行為呢?那就用到一個很出名的自動化測試工具“selenium”。下載地址和各種瀏覽器驅動下載:https://www.seleniumhq.org/download/
- 然后就是設置自定義的請求頭信息了,包括user-agent。下面以谷歌瀏覽器驅動為例:
- 最后就是大量的代理IP了, 畢竟如果只是同一個IP或者某個小區域的IP點擊的話,百度很容易就識別出來了。比較出名的代理IP廠商有:訊代理,蘑菇代理,站大爺等。
當然了,還得掌握如何用Python實現一個分布式的系統哦,畢竟一臺服務器估計是不夠用的。
目前主流的分布式通訊方式有兩種,一種是直接使用RPC協議進行通訊的,這個底層是用TCP協議。還有一種是比較簡單的,就是通過http請求來實現啦,然后再結合celery分布式異步任務框架來完成就OK,這樣實現起來就簡單的多了。只要比RPC簡單哈。
附celery官網地址:http://www.celeryproject.org/
中文文檔(不是最新版的):http://docs.jinkan.org/docs/celery/
優化小技巧:為了更大化的利用服務器的資源,可以用docker來把程序做成一個個小的鏡像服務,這樣一臺服務器上就可以運行很多個docker鏡像了。比開虛擬機的成本低很多哦。
docker是什么鬼?https://www.runoob.com/docker/docker-tutorial.html
那么上面的需要的東西準備好之后,就可以開始開發我們的快排程序啦。這里我就不帶大家一起開發了哈,說下我自己YY出來的程序實現流程。
主要有五大類:
- 驅動類:主要是獲取和設置瀏覽器內核驅動以及獲取搜索結果的相關方法
- 行為類:主要用于模擬用戶的瀏覽行為
- 策略類:用于設置用戶瀏覽和點擊策略的,比如用戶搜索一個詞,用戶是直接一頁頁的找到目標網址直接點擊呢,還是每頁都點擊一下幾條搜索結果,然后一直點擊到目標結果之后退出?又或者是搜索了目標詞的前續搜索詞和后續搜索詞等?
- 任務類:主要用來添加,獲取和執行任務用的
- 代理IP池:一個穩定的IP池是非常重要的
以上就是快排程序基礎的五大類,當然了還有很多細節的東西就不一一展開了,有興趣的自己再琢磨琢磨就OK。
下面說說程序的執行流程:
- 添加任務,一般的任務就是對某一批關鍵詞及這批關鍵詞要點擊的主域名等??梢允孪葴蕚湟环N基礎策略與關鍵詞進行匹配。比如對于控制點擊次數的,可以根據關鍵詞的搜索量或者指數來分配。eg. 對于0-50指數的關鍵詞,每天點擊100次,3天之后觀察效果,沒上去的就繼續添加點擊次數等。
- 把任務放到任務隊列,由分布式任務隊列統一進行管理。
- 如果沒有事先分配點擊策略的,那么會隨機選擇一種策略進行執行。
- 執行完成等待下一次任務的分配。
以上就是一個很粗略的快排程序的設計,其實還有很多細節的東西,比如:如何自動化監控和調整執行點點擊策略等。這個需要加入一個監控模塊和調整模塊。對于已經點擊到首頁的關鍵詞是不是可以減少點擊次數,好讓資源分配給哪些需要更多點擊次數的任務等?
快排系統的好壞主要就是在與點擊策略的設計,如何讓你的點擊更符合真實的用戶點擊和瀏覽行為,模擬得越像,那么就越不容易被百度識別出來。效果當然就越好越長久啦。
總結
本文的目的只是帶大家了解一下“快排”,以及給那些想要開發快排的童鞋一個思路和方向吧。本人并沒有真正開發過快排,所以呢,也不用請教我怎么開發啦。
上面的東西都是本人自己揣測出來的,僅供學習參考,本人不對結果負責哈。