解決方案:網(wǎng)站用于識別網(wǎng)絡(luò )抓取機器人的常用方法
優(yōu)采云 發(fā)布時(shí)間: 2022-11-05 08:24解決方案:網(wǎng)站用于識別網(wǎng)絡(luò )抓取機器人的常用方法
今天網(wǎng)站會(huì )設置一系列的反爬策略,一般都是通過(guò)代理來(lái)解決的。本文將重點(diǎn)介紹網(wǎng)站如何識別您的機器人并將其與真實(shí)用戶(hù)區分開(kāi)來(lái)。
網(wǎng)站識別網(wǎng)絡(luò )爬蟲(chóng)的常用方法如下:
1.當大量請求從單個(gè)IP發(fā)送到一個(gè)URL時(shí),就認為是來(lái)自bot。
2、如果網(wǎng)站的服務(wù)器檢測到你的真實(shí)IP地址,網(wǎng)站可以檢測到機器人的使用。
3.當發(fā)送到網(wǎng)站服務(wù)器的請求有不同的不相關(guān)的屬性時(shí)。
4.當檢測到可疑的瀏覽器配置時(shí),網(wǎng)站可以將其鏈接到bot使用并阻止IP。
5. 在沒(méi)有 cookie 的情況下連接到 網(wǎng)站 是可疑的,并且指向 bot 的使用。
6. 網(wǎng)站還要注意網(wǎng)頁(yè)上的非人類(lèi)行為。機器人難以模擬鼠標和鍵盤(pán)動(dòng)作,并且很容易被檢測到。
識別網(wǎng)絡(luò )抓取中的機器人活動(dòng)是 網(wǎng)站 對您的第一反應。在他們懷疑您的活動(dòng)后,他們可以通過(guò)多種方式做出回應,包括跟蹤您、向您顯示錯誤頁(yè)面或向您提供虛假數據。您最終可能會(huì )被阻止訪(fǎng)問(wèn)該網(wǎng)站。
通用解決方案:網(wǎng)頁(yè)抽取技術(shù)和算法
基于機器學(xué)習的網(wǎng)頁(yè)提取
基于常規或 CSS 選擇器(或 xpath)的網(wǎng)頁(yè)提取是基于基于包裝器的網(wǎng)頁(yè)提取。這種提取算法的共同問(wèn)題是必須針對不同結構的網(wǎng)頁(yè)制定不同的提取規則。如果一個(gè)輿情系統需要監控10000個(gè)異構網(wǎng)站s,它需要編寫(xiě)和維護10000組抽取規則。大約從 2000 年開(kāi)始,人們一直在研究如何使用機器學(xué)習來(lái)讓程序從網(wǎng)頁(yè)中提取所需的信息,而無(wú)需手動(dòng)規則。
從目前的科研成果來(lái)看,基于機器學(xué)習的網(wǎng)頁(yè)提取重點(diǎn)偏向于新聞網(wǎng)頁(yè)內容的自動(dòng)提取,即當輸入一個(gè)新聞網(wǎng)頁(yè)時(shí),程序可以自動(dòng)輸出新聞標題,文字、時(shí)間等信息。新聞、博客、百科網(wǎng)站收錄比較簡(jiǎn)單的結構化數據,基本滿(mǎn)足{title,time,text}的結構,提取目標很明確,機器學(xué)習算法設計的很好。但是,電子商務(wù)、求職等各類(lèi)網(wǎng)頁(yè)所收錄的結構化數據非常復雜,有的存在嵌套,沒(méi)有統一的提取目標。很難為此類(lèi)頁(yè)面設計機器學(xué)習提取算法。
本節主要介紹如何設計一種機器學(xué)習算法,從新聞、博客、百科全書(shū)等中提取文本信息。網(wǎng)站,以下簡(jiǎn)稱(chēng)網(wǎng)頁(yè)內容提?。–ontent Extraction)。
基于機器學(xué)習的網(wǎng)頁(yè)提取算法大致可以分為以下幾類(lèi):
基于啟發(fā)式規則和無(wú)監督學(xué)習的網(wǎng)頁(yè)提取算法
基于分類(lèi)器的網(wǎng)頁(yè)提取算法
基于網(wǎng)頁(yè)模板自動(dòng)生成的網(wǎng)頁(yè)提取算法
三類(lèi)算法中,第一類(lèi)算法實(shí)現最好,效果最好。
下面簡(jiǎn)單介紹一下這三種算法。如果你只是想在你的工程中使用這些算法,你只需要了解第一類(lèi)算法。
下面會(huì )提到一些論文,但是請不要根據論文中自己的實(shí)驗數據來(lái)判斷算法的好壞。很多算法都是面向早期網(wǎng)頁(yè)設計的(即以表格為框架的網(wǎng)頁(yè)),有些算法有實(shí)驗數據集,覆蓋范圍更廣。狹窄。有條件的話(huà)最好自己評估一下這些算法。
1. 基于啟發(fā)式規則和無(wú)監督學(xué)習的網(wǎng)頁(yè)提取算法
基于啟發(fā)式規則和無(wú)監督學(xué)習的網(wǎng)頁(yè)提取算法(第一類(lèi)算法)是目前最簡(jiǎn)單、最有效的方法。并且通用性高,即該算法往往對不同語(yǔ)言、不同結構的網(wǎng)頁(yè)有效。
這些早期的算法大多沒(méi)有將網(wǎng)頁(yè)解析成DOM樹(shù),而是將網(wǎng)頁(yè)解析成一系列token,例如下面的html源碼:
廣告...(8個(gè)字符)
身體...(500字)
頁(yè)腳...(6個(gè)字)
該程序將其轉換為一系列標記:
label(body), label(div), text, text....(8 次), label(/div), label(div), text, text...(500 次), label(/div), label(div), text, text...(6 次), label(/div), label(/body)
早期有基于token序列的MSS算法(Maximum Subsequence Segmentation)。該算法有多個(gè)版本。一個(gè)版本為令牌序列中的每個(gè)令牌分配了一個(gè)分數。評分規則如下:
一個(gè)標簽給出-3.25分
1分文字
根據評分規則和上面的token序列,我們可以得到一個(gè)評分序列:
-3.25,-3.25,1,1,1...(8 次),-3.25,-3.25,1,1,1...(500 次),-3.25,-3.25,1,1,1。..(6 次),-3.25,-3.25
MSS算法認為,如果在token序列中找到一個(gè)子序列,使得該子序列中token對應的score之和達到最大值,那么這個(gè)子序列就是網(wǎng)頁(yè)的文本。換個(gè)角度理解這個(gè)規則,就是從html源字符串中找一個(gè)子序列。這個(gè)子序列應該收錄盡可能多的文本和盡可能少的標簽,因為該算法會(huì )為標簽分配更大的絕對值。負分 (-3.25),給文本一個(gè)小的正分 (1)。
如何從分數序列中找到和最大的子序列可以通過(guò)動(dòng)態(tài)規劃很好地解決。詳細的算法這里就不給出了。有興趣的可以參考論文《Extracting Article Text from the Web with Maximum Subsequence Segmentation》,MSS 算法效果不好,但是這篇論文認為它是很多早期算法的代表。
還有其他版本的 MSS,我們上面說(shuō)過(guò)算法分別給標簽和文本分配 -3.25 和 1 點(diǎn),它們是固定值,并且有一個(gè)版本的 MSS(也在論文中)使用樸素貝葉斯作為標簽和文本。文本計算分數。雖然這個(gè)版本的MSS效果有了一定程度的提升,但還是不夠理想。
無(wú)監督學(xué)習在第一類(lèi)算法中也扮演著(zhù)重要的角色。許多算法使用聚類(lèi)方法將網(wǎng)頁(yè)的文本和非文本自動(dòng)分為兩類(lèi)。例如,在“CETR - Content Extraction via Tag Ratios”算法中,網(wǎng)頁(yè)被分成多行文本,算法為每行文本計算2個(gè)特征,分別是下圖中的橫軸和縱軸,以及紅色橢圓中的單元格。(行),其中大部分是網(wǎng)頁(yè),綠色橢圓中收錄的大部分單元(行)是非文本。使用 k-means 等聚類(lèi)方法,可以很好地將文本和非文本分為兩類(lèi)。然后設計一些啟發(fā)式算法來(lái)區分這兩種類(lèi)型中哪些是文本,哪些是非文本。
早期的算法經(jīng)常使用記號序列和字符序列作為計算特征的單位。從某種意義上說(shuō),這破壞了網(wǎng)頁(yè)的結構,沒(méi)有充分利用網(wǎng)頁(yè)的特性。在后來(lái)的算法中,很多使用 DOM 樹(shù)節點(diǎn)作為特征計算的基本單元,例如“通過(guò)路徑比率提取 Web 新聞”、“通過(guò)文本密度提取基于 Dom 的內容”,這些算法仍然使用啟發(fā)式規則和無(wú)監督學(xué)習,因為DOM樹(shù)的節點(diǎn)作為特征計算的基本單元,算法可以獲得更好更多的特征,因此可以設計出更好的啟發(fā)式規則和無(wú)監督學(xué)習算法。通常比前面描述的算法要高得多。由于提取時(shí)以DOM樹(shù)的Node為單位,
我們在WebCollector(1.12版本開(kāi)始)中實(shí)現了一流的算法,可以直接從官網(wǎng)下載源代碼使用。
2.基于分類(lèi)器的網(wǎng)頁(yè)抽取算法(第二類(lèi)機器學(xué)習抽取算法)
實(shí)現基于分類(lèi)器的網(wǎng)頁(yè)提取算法(第二種算法),一般流程如下:
找到數千個(gè)網(wǎng)頁(yè)作為訓練集,手動(dòng)標注文本和非文本(即需要提取的部分和不需要提取的部分)。
設計特點(diǎn)。例如,一些算法將 DOM 樹(shù)的標簽類(lèi)型(div、p、body 等)作為特征之一(當然這是一個(gè)已棄用的特征)。
選擇合適的分類(lèi)器并使用這些特征進(jìn)行訓練。
對于網(wǎng)頁(yè)提取來(lái)說(shuō),特征設計是第一要務(wù),使用什么分類(lèi)器有時(shí)并不那么重要。在使用相同特征的情況下,使用決策樹(shù)、SVM、神經(jīng)網(wǎng)絡(luò )等不同的分類(lèi)器,不一定對提取效果有太大影響。
從工程的角度來(lái)看,該過(guò)程的第一步和第二步都比較困難。訓練集的選擇也很講究,保證所選數據集中網(wǎng)頁(yè)結構的多樣性。比如現在比較流行的文本結構是:
xxxx
xxxxxxxx
xxx
xxxxx
xxxx
如果訓練集中只有五六個(gè)網(wǎng)站頁(yè)面,很有可能這些網(wǎng)站的文本都是上面的結構,而僅僅在特征設計上,有兩個(gè)特征:
節點(diǎn)標簽類(lèi)型(div、p、body 等)
子節點(diǎn)標簽類(lèi)型的頻率(即子節點(diǎn)中有多少個(gè)div,多少個(gè)p...)
假設使用決策樹(shù)作為分類(lèi)器,最終訓練出來(lái)的模型很可能是:
如果一個(gè)節點(diǎn)的標簽類(lèi)型為div,且其子節點(diǎn)中標簽為p的節點(diǎn)超過(guò)3個(gè),則該節點(diǎn)對應網(wǎng)頁(yè)的body
雖然這個(gè)模型可以在訓練數據集上取得更好的提取效果,但是很明顯有很多網(wǎng)站不符合這個(gè)規則。因此,訓練集的選擇對提取算法的效果影響很大。
網(wǎng)頁(yè)設計的風(fēng)格在不斷變化。早期的網(wǎng)頁(yè)經(jīng)常使用表格來(lái)構建整個(gè)網(wǎng)頁(yè)的框架?,F在的網(wǎng)頁(yè)都喜歡用div來(lái)搭建網(wǎng)頁(yè)的框架。如果希望提取算法覆蓋較長(cháng)的時(shí)間,那么在設計特征時(shí)應該盡量使用那些不易改變的特征。標簽類(lèi)型是一個(gè)很容易改變的特征,并且隨著(zhù)網(wǎng)頁(yè)設計風(fēng)格的變化而變化,所以如前所述,強烈不建議使用標簽類(lèi)型作為訓練特征。
上面提到的基于分類(lèi)器的網(wǎng)頁(yè)提取算法屬于急切學(xué)習,即算法通過(guò)訓練集生成模型(如決策樹(shù)模型、神經(jīng)網(wǎng)絡(luò )模型等)。對應的惰性學(xué)習,也就是不預先使用訓練集就生成模型的算法,比較有名的KNN屬于惰性學(xué)習。
有些提取算法使用KNN來(lái)選擇提取算法,聽(tīng)上去可能有點(diǎn)混亂,這里解釋一下。假設有2個(gè)提取算法A和B,有3個(gè)網(wǎng)站site1,site2,site3。2種算法對3個(gè)網(wǎng)站的提取效果(這里使用0%到100%之間的數字表示,越大越好)如下:
網(wǎng)站 算法A的提取效果 算法B的提取效果
站點(diǎn) 1 90% 70%
站點(diǎn) 2 80% 85%
站點(diǎn) 3 60% 87%
可以看出,在site1上,算法A的提取效果優(yōu)于B,在site2和site3上,算法B的提取效果更好。在實(shí)踐中,這種情況非常普遍。所以有人想設計一個(gè)分類(lèi)器,這個(gè)分類(lèi)器不是用來(lái)對文本和非文本進(jìn)行分類(lèi),而是幫助選擇提取算法。例如,在這個(gè)例子中,當我們提取site1中的網(wǎng)頁(yè)時(shí),分類(lèi)器應該告訴我們使用A算法以獲得更好的結果。
舉個(gè)直觀(guān)的例子,算法A對政府網(wǎng)站的提取效果更好,算法B對網(wǎng)絡(luò )新聞網(wǎng)站的提取效果更好。那么當我提取政府類(lèi)網(wǎng)站時(shí),分類(lèi)器應該會(huì )幫我選擇A算法。
這個(gè)分類(lèi)器的實(shí)現可以使用KNN算法。需要提前準備一個(gè)數據集。數據集中有多個(gè)站點(diǎn)的網(wǎng)頁(yè),需要同時(shí)維護一個(gè)表。哪種算法提取最好的結果)。當遇到要提取的網(wǎng)頁(yè)時(shí),我們將該網(wǎng)頁(yè)與數據集中的所有網(wǎng)頁(yè)進(jìn)行比較(效率低下),找到最相似的K個(gè)網(wǎng)頁(yè),然后查看K個(gè)網(wǎng)頁(yè)中哪個(gè)站點(diǎn)的網(wǎng)頁(yè)最多(例如k= 7,其中6個(gè)來(lái)自CSDN News),那么我們選擇本站最好的算法來(lái)提取這個(gè)未知網(wǎng)頁(yè)。
3.基于網(wǎng)頁(yè)模板自動(dòng)生成的網(wǎng)頁(yè)提取算法
基于網(wǎng)頁(yè)模板自動(dòng)生成的網(wǎng)頁(yè)提取算法(第三類(lèi)算法)有很多種。這是一個(gè)例子。在“URL Tree: Efficient Unsupervised Content Extraction from Streams of Web Documents”中,比較相同結構的多個(gè)頁(yè)面(以URL判斷),找出異同。頁(yè)面之間的共同部分是非文本的,頁(yè)面之間的差異很大。部分可能是文本。這很容易理解。例如,在某些網(wǎng)站 頁(yè)面中,所有頁(yè)腳都相同,即歸檔信息或版權聲明。這是頁(yè)面之間的共性,所以算法認為這部分是非文本的。不同網(wǎng)頁(yè)的文本往往是不同的,因此算法更容易識別文本頁(yè)面。該算法往往不會(huì )從單個(gè)網(wǎng)頁(yè)中提取文本,而是在采集大量同構網(wǎng)頁(yè)后同時(shí)提取多個(gè)網(wǎng)頁(yè)。也就是說(shuō),不需要實(shí)時(shí)輸入網(wǎng)頁(yè)并提取。






