爬蟲--網路資料採集
用一週的時間翻完了python網路資料採集,在此整理一下。
0x000資料採集
資料採集是一個很寬泛的概念,總的來說應該包含以下部分。
選擇採集目標源–>組織構建資料庫–>編寫爬蟲–>資料清洗–>資料整理–>存入資料庫,一般情況下選擇目標源和構建資料庫是其中的主要元素。目標源決定你收集到資料的可用性,爬蟲決定你的計劃是否可達。
0x001目標源選擇
個人感覺目標源選取應按照以下條目進行排序:資料相關性 、易爬取程度、資料量、robots協議,當然根據自己需求可以靈活變動。同等情況下儘量避免大型企業的官網,因為其中大部分都具備反爬策略(當然有時間可以選擇以下,這個鬥智鬥勇的過程挺鍛鍊的
0x010爬蟲
推薦使用的庫有Requests、BeautifulSoup、scrapy、selenium
如果對於效率需求不是特別高,可以考慮使用Requests post請求蒐集頁面,然後使用BeautifulSoup分析頁面標籤,這樣實現較為簡單,也能解決大部分需求。
如果對效率比較重視,或需要完成一個工程化的採集專案,Scarpy可以作為首選。對分散式處理的良好支援和清晰的模組化層次在提升效率的同時更易於進行程式碼的管理。
對http的相關請求,使用requests比用其他庫函式更加明智。
如果你處理的頁面大量使用了js或者存在驗證碼 處理過程就比較麻煩了 不過selenium仍然可以解決你大部分需求。
0x011資料清洗
因為種種原因,我們獲得的資料和期望中的總有一定的差別,這一部分的任務就是消除異常資料將其轉換為易於處理的形式。
資料的異常主要包括:資料格式異常和資料內容異常。
你需要的資料可能儲存於一個PDF、word、jpg格式的檔案中,將它們轉換成文字然後提取相應的資訊是資料清洗工作的一部分。對這部分我們可以使用Python的Pillow、Tesseract、NumPy來進行相關的處理,當然利用第三方介面也是個不錯的主意。
另外,因為網頁釋出者的疏忽,網頁上有部分資料和其他頁面呈現不同,但你可能把這部分資料也爬取下來。這時你需要進行一定的處理將資料格式進行統一。
0x100反爬蟲
這部分是爬蟲中最有意思的部分,你需要與對方鬥智鬥勇,很可能你還沒有想好怎麼繞過他的機制,對方又對反爬機制進行了更新。97年eBay和Bidder’s Edge之間的爬蟲與反爬蟲策略為後來的資料採集者和運維工程師提供了不少示例,但現今html的迅速發展,似乎對雙方也有不小的提示。
目前常見的反爬蟲機制主要有如下幾種:
1.驗證碼
從最基礎的字元識別驗證碼,到後來文字驗證碼,表示式驗證碼,滑動驗證碼。雖然層次多樣,但處理機制大概相同,最基礎的應用一些計算機圖形學的知識就可以解決,深層次的利用機器學習訓練相關識別軟體也能破解。12306的圖片相關性驗證碼主要基於資料的深度拓撲,但是其對於人類本身也是一個不小的挑戰,特別是在搶票的時候突然讓你選出下圖中所有的Lan口,除非你對計算機硬體有所瞭解,不然選出正確答案確實不易。但是其也有一定的破解方案,仍然利用影象識別結合使用者反饋,似乎鐵友有一段時間推出過一個大眾活動,使用手機幫助進行影象標識,用白菜價獲得了數百萬標記好的資料,在後來的購票中只能選擇相應的驗證碼。
2.表單隱藏內容
有些頁面表單會向用戶隱藏一些資訊,如果你使用爬蟲不加以區分而填寫了相應的欄位,很可能會被對方直接判為一個爬蟲,然後進行ip封禁。
3.頁面資料顯示處理
有些頁面會將資料進行重排組成正確的資料。如果你在爬取過程中沒有注意也只能得到一些毫無價值的內容。
Emmm…
本來想弄一個驗證碼識別的小程式 但發現使用Python的Tesseract還需要自己標註一些資料 但本意是弄一個自動訓練的識別工具 所以暫時擱置 等以後有了相關想法再開始動工
菜雞還是要繼續努力啊…