爬蟲“學前班”,記住這些不踩坑!
摘要:爬蟲就是模擬人的訪問操作來獲取網頁/App資料的一種程式。
爬蟲是什麼?
簡單的說爬蟲就是模擬人的訪問操作來獲取網頁/App資料的一種程式。我們可以把網際網路比作一張大網,而爬蟲(即網路爬蟲)便是在網上爬行的蜘蛛。把網的節點比作一個個網頁,爬蟲爬到這就相當於訪問了該頁面,獲取了其資訊。可以把節點間的連線比作網頁與網頁之間的連結關係,這樣蜘蛛通過一個節點後,可以順著節點連線繼續爬行到達下一個節點,即通過一個網頁繼續獲取後續的網頁,這樣整個網的節點便可以被蜘蛛全部爬行到,網站的資料就可以被抓取下來了。
而我們平時所看到的搜尋引擎、統計資料、出行類軟體、聚合類平臺都離不開網路爬蟲。
爬蟲的應用領域有哪些?
我們常見的應用場景簡單舉例如下,
1.搜尋引擎抓取網頁資訊
2.出行類軟體通過爬蟲搶票
3.論壇或者微博的輿情監控。用資料採集技術來監測搜尋引擎、新聞門戶、論壇、部落格、微博、微信、報刊、視訊的輿情。說白了就是用這個來實現實時的發現某一行業或地區的熱點事件,譬如清博輿情,百度輿情等等。
4.比價網站的應用。如今各大電商平臺為了活躍使用者進行各種秒殺活動,還有優惠券等,同樣的一個商品可能在不同網購平臺價格不一樣,這就催生了返利網,折多多,折xx等。那麼這些網站是如何在幾分鐘之內甚至秒級的時間內知道一件商品在某站有優惠的呢?這就需要一個數據採集系統(爬蟲)來實時監控各站的價格浮動,先採商品的價格、型號、配置等,在做處理、分析、反饋。
為什麼學習爬蟲?
網際網路的快速發展,帶來了前所未有的便利,同樣也帶來很多之前沒有遇到的新問題。獲取資訊的成本越來越低,資訊的種類和數量越來越多,但是我們處理資訊的能力並沒有提升,很難從資訊中提取自己感興趣的內容。
而學會爬蟲就可以自動高效的獲取網際網路中我們感興趣的內容,幫助我們快速搭建屬於自己的資訊知識庫。
如何完成一個輕量級爬蟲
這裡簡要概述為三個步驟:獲取資料 - 解析資料 - 儲存資料。以下是完成這些步驟所涉及的工具,供大家參考。
獲取資料:urllib2、Requests、Selenium、aiohttp
獲取資料的工具:Chrome、Fiddler、MitmProxy、Appium
解析資料:Css 選擇器、PyQuery、BeautifulSoup、Xpath、Re
儲存資料:MySQL、MongoDB、Redis
工程化爬蟲
工程化爬蟲的專案推薦:Scrapy、PySpider
官方文件:https://docs.scrapy.org/en/latest/、http://docs.pyspider.org/en/latest/
Github 地址:https://github.com/scrapy/scrapy、https://github.com/binux/pyspider
反爬蟲的措施與應對
1.網頁反爬蟲—字型反爬
開發者可以使用 @font-face 為網頁指定字型,就可以呼叫自定義的字型檔案來渲染網頁中的文字,網頁中的文字變成相應的編碼,這時通過簡單的網頁採集就無法獲取編碼後的網頁內容。
應對措施:字型反爬相對與其他的反爬,他的難度屬於較為初級的階段,主要是在處理的時候比較麻煩,比較注重防禦的網站,往往一個網站有多套不同的字型加密防禦體系,比如 135 用 A 方案,246 用 B 方案,這個需要一定的耐心去分析字型的規律並使用 Python 解析字型檔案,找出對映規律才可以解決。
推薦工具:fontTools、百度字型編輯器(http://fontstore.baidu.com/static/editor/index.html)
2.網頁反爬蟲—驗證碼
驗證碼是一種區分使用者是計算機還是人的公共全自動程式,常見的驗證碼有:多位英數混合驗證碼、滑動驗證碼、點選驗證碼、旋轉驗證碼等等。
應對措施:專案預算充足的情況下可以對接專業的打碼平臺,減少 90 % 的工作量;預算不足的情況可以使用華為雲 ModelArts,不用寫一行程式碼,就能完成模型的搭建
推薦工具:華為雲 ModelArts、CC框架
3.網頁反爬蟲—JS 加密/混淆
前端的程式碼都是公開的,那麼加密有意義嗎?有的,通過去除程式碼中儘可能多的有意義的資訊,比如註釋、換行、空格、程式碼負號、變數重新命名、屬性重新命名(允許的情況下)、無用程式碼的移除儘可能增加爬蟲工程師閱讀程式碼的成本。
應對措施:輕中度混淆或者混淆的程式碼,可以通過閱讀混淆後的程式碼,梳理加密邏輯後扣取可執行的 Js 程式碼,使用 Python 庫呼叫完成加密引數的生成;重度混淆使用 AST 語法樹還原混淆的程式碼,去除無意義的垃圾程式碼,還原清晰的加密邏輯後使用 Python 庫呼叫完成加密引數的生成。
推薦工具:AST、PyExecJS
4.APP 反爬蟲
都2020年了,目前通過應用市場下載的 APP還有不加殼的嗎?除了加殼防護外,常見的 APP 也應用了單向或雙向證書驗證,簡單的中間人攻擊已經無法抓到 APP 的資料包,學習 APP 逆向已經勢在必行。
應對措施:APP 逆向需要學習的內容非常多,這裡只針對無法抓到 APP 包做簡單的總結(推薦工具:Frida、Xposed、IDA、jadx、Charles):
【單向認證和雙向認證】
單向驗證的情況是客戶端校驗證書,校驗出錯就無法訪問
雙向認證的情況是客戶端校驗證書的時候,服務端也要校驗證書,有一端證書校驗失敗都無法訪問資料。缺點是伺服器的壓力比較大
處理方法:一般是使用 JustTrustMe,原理是通過 Xpose Hook 校驗的 API。
【APP不走代理—如何確定 APP 不走代理?】
(1)關閉代理伺服器(fiddler等代理抓包工具)(2)使用手機訪問瀏覽器網頁訪問失敗,確定代理失效(3)使用APP訪問,正常訪問確定 APP 不走代理訪問網路
處理方法:更換不基於代理型別的抓包工具(HTTP Analyzer V7--缺點沒辦法用在真機、HTTP Debug Pro、手機端的HttpCanary-基於VPN);hook-先反編譯看看他是使用了那個框架,然後針對性的hook-菜雞勸退;iptables 強制攔截轉發
【代理檢測的APP】
掛上代理之前APP訪問正常,掛上代理之後APP無法使用顯示網路出錯等情況
(1)代理檢測(hook 代理檢測的方法)(2)證書檢測(用 JustTrustMe )
【雙向認證的APP】
雙向認證的情況是客戶端校驗證書的時候,服務端也要校驗證書,有一端證書校驗失敗都無法訪問資料。
不過在雙向認證的APP中要做到雙向驗證,在APP中一般要配置好伺服器端驗證的證書,所以在客戶端中我們可以找到一個服務端的證書,我們只要在 Fiddler 中配置好這個證書就可以請求了。
ps:證書一般帶有密碼,需要反編譯找到密碼,之後匯入至系統當中,再從系統中匯出為 .cer 證書格式,之後在 FiddlerScript 中配置即可。
分散式爬蟲都是什麼?
如果你已經學習瞭如何編寫工程化爬蟲,並對它有一定的心得,那麼你已經開始對爬蟲架構有一定的心得了。
而分散式爬蟲看著概念嚇人,其實往簡單的看就是將單機的爬蟲分佈到多臺機器,主要的重點在於訊息阻塞處理,日誌告警、資料完整性校驗等等問題。
針對億級以下的輿情資料,可以試著學習 Scrapy + Redis + MQ + Celery 這樣的組合,足以應對。
如果是針對垂直領域的資料抓取,可以將重心放在如果快而穩的獲取資料上,畢竟垂直領域的資料抓取,爬蟲與反爬蟲的對抗是最激烈的。
學習資源推薦
崔慶才:《Python3 網路爬蟲開發實戰》
韋世東:《Python3 反爬蟲原理與繞過實戰》、《Python3 網路爬蟲寶典 》
爬蟲相關的公眾號:NightTeam、鹹魚學Python、進擊的Coder、菜鳥學Python程式設計、妄為寫程式碼
學Python,請上華為雲學院!
華為雲學院是華為雲官方雲端計算技術培訓學習平臺,作為雲時代下的創新開發者人才學院,華為雲學院打造了架構完整、內容豐富、形式多樣的“學、練、考、證”一站式學習與體驗平臺。使用者可通過線上課程進行學習,在沙箱實驗室進行練習,考試後獲取官方認證證書,掌握最新培訓服務資訊,促進綜合技能提升。
華為雲1024程式設計師節,向雲而生
直播盛典:邀請華為云云原生開源負責人、華為雲DevCloud首席技術佈道師等10+大咖現身,剖析雲原生的行業趨勢,傾授雲原生實戰祕籍。點選觀看直播。
乾貨直通車:大佬級別專家手把手教學,經驗和技術分享必不可少,還有線上互動答疑,帶你揭曉大廠最深層程式碼技術,點選檢視各技術會場,挖掘更多幹貨!
本文根據【鹹魚學Python】公眾號號主戴煌金在“華為雲1024程式設計師節”技術分論壇的直播內容整理而成,感興趣的開發者們可點選回看直播。
點選關注,第一時間瞭解華為雲新鮮技