爬蟲如何寫?記住這些不踩坑
爬蟲是什么?
簡單的說爬蟲就是模擬人的訪問操作來獲取網頁/App數據的一種程序。我們可以把互聯網比作一張大網,而爬蟲(即網絡爬蟲)便是在網上爬行的蜘蛛。把網的節點比作一個個網頁,爬蟲爬到這就相當于訪問了該頁面,獲取了其信息。可以把節點間的連線比作網頁與網頁之間的鏈接關系,這樣蜘蛛通過一個節點后,可以順著節點連線繼續爬行到達下一個節點,即通過一個網頁繼續獲取后續的網頁,這樣整個網的節點便可以被蜘蛛全部爬行到,網站的數據就可以被抓取下來了。
而我們平時所看到的搜索引擎、統計數據、出行類軟件、聚合類平臺都離不開網絡爬蟲。
爬蟲的應用領域有哪些?
我們常見的應用場景簡單舉例如下,
搜索引擎抓取網頁信息
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 網絡爬蟲寶典 》
學Python,請上華為云學院!
華為云學院是華為云官方云計算技術培訓學習平臺,作為云時代下的創新開發者人才學院,華為云學院打造了架構完整、內容豐富、形式多樣的“學、練、考、證”一站式學習與體驗平臺。用戶可通過在線課程進行學習,在沙箱實驗室進行練習,考試后獲取官方認證證書,掌握最新培訓服務資訊,促進綜合技能提升。
華為云1024程序員節,向云而生
直播盛典:邀請華為云云原生開源負責人、華為云DevCloud首席技術布道師等10+大咖現身,剖析云原生的行業趨勢,傾授云原生實戰秘籍。點擊觀看直播。
干貨直通車:大佬級別專家手把手教學,經驗和技術分享必不可少,還有在線互動答疑,帶你揭曉大廠最深層代碼技術,點擊查看各技術會場,挖掘更多干貨!
本文根據【咸魚學Python】公眾號號主戴煌金在“華為云1024程序員節”技術分論壇的直播內容整理而成,感興趣的開發者們可點擊回看直播。
Python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。