從千億頁面上提取數據所總結的產品數據五大經驗
如今從網上抓取數據看似非常容易。有許多開源庫和框架、可視化抓取工具和數據提取工具,可以很容易地從一個網站上抓取數據。但是,當你想大規模地搜索網站時,很快就會感覺到非常棘手。
本文來自小螞蟻站長吧
本文中,我們將與你分享自2010年以來借助Scrapinghub從一千億個產品頁面上抓取數據時所學到的經驗教訓,讓你深入了解從電子商務店鋪大規模提取產品數據時面臨的挑戰,并與你分享一些應對這些挑戰的最佳實踐經驗。 內容來自小螞蟻站長吧
Scrapinghub成立于2010年,是數據提取公司中的佼佼者之一,也是Scrapy的締造者——Scrapy是當今最強大、最受歡迎的網絡抓取框架。目前,Scrapinghub為全球眾多的大型電子商務公司每月抓取超過80億的頁面(其中30億是產品頁面)。
大規模抓取網頁的要點
與標準的抓取網頁應用程序不同,大規模抓取電子商務的產品數據將面臨一系列獨特的挑戰,這使得網頁抓取異常艱難。 本文來自小螞蟻站長吧
從本質上來說,這些困難可以歸結為兩個方面:速度和數據質量。
本文來自小螞蟻站長吧
通常時間是一個限制性約束,因此大規模抓取需要網絡爬蟲以非常高的速度抓取頁面,并不會影響數據質量。這種對速度的要求造成大量抓取產品數據富有非常大的挑戰性。
本文來自小螞蟻站長吧
挑戰1:雜亂且變幻無常的網頁格式
雜亂且變化無常的網頁格式可能是最常見的挑戰,也可能不是最令人感興趣的挑戰,但它是迄今為止大規模提取數據時面臨的最大挑戰。這項挑戰的關鍵不在于復雜性,而是需要花費大量時間和資源去處理。
如果你有過創建電子商務店鋪爬蟲經歷的話,你就會知道電子商務店鋪代碼的雜亂無章是普遍現象。這不僅僅是HTML的格式或偶爾的字符編碼問題。多年來,我們遇到了各種各樣的問題,例如濫用HTTP響應代碼、不完整的JavaScripts,或濫用Ajax: copyright 小螞蟻站長吧
- 在產品銷售終止后,店鋪會刪除頁面,且在網站升級后404錯誤處理程序突然返回的響應狀態為200;
- 有些頁面錯誤地轉義JSON數據,導致頁面上的Javascript遭到破壞,例如‘b0rk’d’等,所以必須使用正則表達式來刪除這些數據;
- 店鋪大量濫用Ajax調用,所以只能等頁面渲染完畢(這會導致爬蟲速度更慢)或模仿API調用(這會導致額外的開發工作)才能想要的拿到信息。
如此雜亂的代碼會讓編寫爬蟲工作十分痛苦,且無法使用抓取工具或自動提取工具。
本文來自小螞蟻站長吧
在大規模抓取網頁時,你不僅需要瀏覽幾百個像這樣雜亂的網站,還要處理網站的不斷更新。一個經驗法則是:每2-3個月目標網站的變動就會廢掉你的爬蟲。
內容來自小螞蟻站長吧
可能聽起來不是什么大不了的事兒,但是當你大規模抓取時,這些意外會積累成災。例如,Scrapinghub的一個大型電子商務項目大約有4000個爬蟲,需要抓取1000個電子商務網站,這意味著每天他們都有20-30只爬蟲遭遇失敗。 內容來自小螞蟻站長吧
來自區域和多語言網站布局的變動,A/B分割測試和包裝/定價變動也會經常給爬蟲帶來問題。
沒有捷徑 http://www.yqejgy.live/
很不幸的是,沒有完全解決這些問題的靈丹妙藥。很多時候,我們只能隨著規模擴展投入更多資源。以上述項目為例,負責項目的團隊共有18名爬蟲工程師和3名專職QA,以確保客戶始終擁有可靠的數據。
內容來自小螞蟻站長吧
但是,憑借經驗團隊可以學會如何創建更強大的爬蟲,以便檢測和對付網站格式的各種怪招。
最佳做法不是為目標網站可能使用的所有布局逐一編寫爬蟲,而是僅憑一個產品提取的爬蟲就可以處理不同頁面布局所使用的所有可能規則和方案。爬蟲擁有的配置越多越好。
雖然這些做法會讓爬蟲更加復雜(我們的一些爬蟲長達幾千行),但可以保證爬蟲更加易于維護。 copyright 小螞蟻站長吧
由于大多數公司需要每天都抽取產品數據,所以我們無法花費幾天時間等待工程團隊修改遭到破壞的爬蟲。對于這種情況,Scrapinghub使用一種基于數據提取工具的機器學習,我們開發了這種機器學習模型作為后備,直到爬蟲被修復。這種基于機器學習的提取工具可以自動識別目標網站的目標字段(產品名稱、價格、貨幣、圖像、SKU等等),并返回所需的結果。 copyright 小螞蟻站長吧
挑戰2:可擴展性架構
你將面臨的下一個挑戰是:構建一個爬蟲基礎架構,該架構可以隨著每天請求數量的增加而擴展,而不會降低性能。 http://www.yqejgy.live/
當大規模提取產品數據時,簡單的網頁爬蟲只能連續地抓取數據,而不會節選。通常,一個連續的網頁抓取會循環發送請求,一個接一個,每個請求需要2-3秒才能完成。 http://www.yqejgy.live/
如果爬蟲每天都請求量小于4萬個的話(每2秒發送一個請求,意味著每天可以發送43,200個請求),這個方法還可以。但是,一旦請求數量超過這個數,你就需要切換到每天可以發送幾百萬請求且不會降低性能的爬蟲架構。
正如上述討論,速度是大規模抓取產品數據的關鍵。你需要確保在一定時間內(通常為一天)找到并抓取所有所需的產品頁面。為此,你需要執行以下操作:
http://www.yqejgy.live/
從產品提取中分離產品搜索
為了大規模提取產品數據,你需要從產品提取爬蟲中分離產品搜索爬蟲。 copyright 小螞蟻站長吧
產品搜索爬蟲的目標應該是找到目標產品種類(或“貨架”),并保存該種類下產品的URL,以供產品提取爬蟲使用。當產品搜索爬蟲將產品URL加到隊列后,產品提取爬蟲會從茶品頁面上抓取目標數據。
copyright 小螞蟻站長吧
這項工作可以借助流行的爬蟲工具的輔助,例如由Scrapinghub開發的開源爬蟲工具Frontera等。雖然最初設計Frontera是為了用于Scrapy,但它完全沒有限制,可以與任何其他爬蟲框架或獨立項目一起使用。在本文中,我們將分享如何使用Frontera大量挖掘HackerNews的數據。 本文來自小螞蟻站長吧
為產品提取分配更多資源
http://www.yqejgy.live/
由于每個產品類別“貨架”可以包含10到100個產品,且與提取產品URL相比,提取產品數據需要更多資源,因此搜索爬蟲的速度通常比產品抽取爬蟲更快。對于這種情況,你需要為每個搜索爬蟲配備多個抽取爬蟲。經驗法則是:每100,000頁需要創建一直單獨的抽取爬蟲。 本文來自小螞蟻站長吧
挑戰3:維持吞吐量性能
大規模抓取很像賽車Formula 1,我們的目標是為了提高速度,盡可能地減輕車身重量,并從發動機中擠出最后一部分馬力。對于大規模網絡抓取也是如此。
在提取大量數據時,我們必須盡可能尋找可以將周期時間降到最小、并在現有硬件資源的基礎上將爬蟲性能提高到最大的方法。所有這些都必須減少每個請求的時間,哪怕是幾毫秒。 copyright 小螞蟻站長吧
為此,你的團隊需要深入了解正在使用的網頁抓取框架、代理管理和硬件,才能更好地調優,以獲取最佳性能。你還需要關注:
爬蟲效率
http://www.yqejgy.live/
大規模抓取的時候,我們始終應該努力在盡可能少的請求次數內提取所需的確切數據。任何額外的請求或數據提取都會降低抓取網站的速度。在設計爬蟲時,請記住以下幾點:
copyright 小螞蟻站長吧
- 只是用沒有頭部的瀏覽器,如Splash或Puppeteer等,將JavaScript渲染放到最后。抓取網頁時,使用沒有頭部的瀏覽器渲染JavaScript會非常耗費資源,并且會嚴重影響到抓取速度;
- 如果無需向每個產品頁面發送請求,也可以從貨架頁面(例如產品名稱、價錢、口碑等)獲取數據,則不要請求產品頁面;
- 除非有必要,否則不要請求或提取圖像。
挑戰4:反機器人策略
在大規模抓取電子商務網站的時候,肯定會遇到使用反機器人策略的網站。 copyright 小螞蟻站長吧
對于大多數小型網站來說,他們的反機器人策略非常基本(禁止IP提出超額請求)。然而,對于亞馬遜等大型電子商務網站說,他們會使用非常成熟的反機器人策略,例如Distil Networks、Incapsula或Akamai等,這會讓提取數據變得更加困難。
代理 內容來自小螞蟻站長吧
請記住,對于大規模抓取產品數據的項目來說,最重要的要求是使用代理IP。在大規模抓取時,你需要一個相當大的代理列表,并且需要實現必要的IP輪換、請求限制、會話管理和黑名單邏輯,以防止代理被封殺。
除非你有一個龐大的隊伍管理代理,否則你應該將這部分抓取工作外包出去。外面有大量代理服務可以提供各種級別的服務。 http://www.yqejgy.live/
但是,我們建議你可以與代理商合作,讓他們為代理配置提供單個端點并隱藏管理代理的復雜性。大規模抓取非常耗資源,更不用想需要通過開發和維護建立自己內部的代理管理基礎設施了。 copyright 小螞蟻站長吧
大多數大型電子商務公司都采用這種方法。許多世界上最大的電子商務公司都是用Scrapinghub開發的智能下載器Crawlera,將代理管理全權外包。如果你的抓取工具每天需要發出兩千萬個請求的話,相較于代理管理,專注于抓住會更有意義。
超越代理 http://www.yqejgy.live/
不幸的是,僅使用代理服務還不足以確保可以規避大型電子商務網站的反機器人策略。越來越多的網站開始使用成熟的反機器人策略,來監控爬蟲行為,檢測請求是否來自人類訪問者。
這些反機器人策略不僅會給電子商務網站的抓取制造困難,而且如果處理不當,與它們的斗爭還會嚴重影響爬蟲的性能。
內容來自小螞蟻站長吧
這些反機器人策略大多數都是用JavaScript來確定請求來自于爬蟲還是人(JavaScript引擎檢查、字體枚舉、WebGL和Canvas等)。
內容來自小螞蟻站長吧
但是如前所述,大規模抓取數據時,我們希望使用可編寫腳本的沒有頭部的瀏覽器(如Splash或Puppeteer等),頁面上的JavaScript渲染會給資源造成壓力,并降低抓取網站的速度。
這意味著為了確保你的爬蟲可以達到必要的吞吐量,從而提供每日的產品數據,通常你需要費盡心思對抗反網站上使用的機器人策略,并設計爬蟲在不使用沒有頭部的瀏覽器的情況下也可以戰勝它們。
copyright 小螞蟻站長吧
挑戰5:數據質量
從數據科學家的角度來看,網頁抓取項目最重要的考慮因素是提取的數據質量。大規模抓取更加關注數據的質量。
如果每天需要提取幾百萬個數據點,那么手工驗證所有數據是否干凈完整是不可能的。一個不小心臟數據或不完整的數據就會進入數據源,并破壞數據分析工作。 http://www.yqejgy.live/
當店鋪有多個版本(不同語言、地區等)或從不同店鋪抓取數據時,數據質量尤為重要。 內容來自小螞蟻站長吧
除了仔細的QA流程外,創建爬蟲的設計階段,通過互相審查和測試爬蟲的代碼可以確保以最可靠的方式提取所需的數據。確保數據高質量的最佳方法是開發自動化QA監視系統。 copyright 小螞蟻站長吧
作為數據提取項目的一部分,你需要計劃和開發一個監控系統,來提醒你數據上出現的不一致和爬蟲錯誤。在Scrapinghub,我們開發了機器學習算法用于檢測:
- 數據驗證錯誤:每條數據都有定義好的數據類型和需要遵循的賦值模式。如果數據項的數據類型不一致,我們的數據驗證算法會通知QA團隊,由他們負責手動檢查數據,經過驗證后返還或標記成錯誤。
- 產品差異錯誤:當從同一個網站的不同版本(不同語言、地區等)抓取同一個產品數據時,可能會有所不同,且理應固定的值(例如產品重量、尺寸等)也有可能變化。這有可能是網站的反機器人策略給出了一個或多個虛假信息。同樣,你需要合適的算法來識別和標記此類數據。
- 卷上數據的不一致:另一個關鍵的監控腳本是檢測返回的記錄數量的異常變化。這可能表示網站已經做了修改,或者你的爬蟲拿到的是虛假信息。
- 網站更新:目標網站的結構變化是造成爬蟲崩潰的主要原因。我們有專門的監控系統,非常積極地監控這種情況。該工具會頻繁地檢查目標站點,確保自上次抓取以來沒有任何變化。一旦發現變化,它會發出通知。
總結
如你所見,大規模抓取產品數據需要面臨一系列獨特的挑戰。希望這篇文章可以讓你更加了解這些挑戰以及如何解決這些挑戰。
copyright 小螞蟻站長吧
在Scrapinghub,我們專注于將非結構化Web數據轉換為結構化數據。如果你對本文有任何想法,請在下面留言。
文:Ian Kerins 譯:彎月/CSDN(CSDNnews)
http://www.yqejgy.live/
相關文章推薦:
熱門閱讀推薦:
圖文精選:
-
做流量轉化分析有什么意義?
某在線教育企業提供收費的培訓課程,通過SEM投放獲取用戶線索,然后由銷售跟...
-
【GA工具技巧】如何在Google Analytics使用數據透視表
數據透視是GA報表的一個隱藏技能。它是一個極其強大的數據匯總工具,能實現...
-
如何在Google Tag Manager中創建事件追蹤代碼
今天小編將為大家介紹如何在Google Tag Manager(GTM)中設置事件追蹤代碼,在GT...
-
電商3.0時代:如何做好數據管理?
電商到底是什么呢?很多人有著自己不同的定義,但大部分人認為電商就是互聯...
-
身為網站數據分析師,你需要具備這9大本領
...