第一次完整看了一次技術直播,靜距離地接觸到了崔慶才老師,正是他的網易課程讓我入了爬蟲的門,成功地開發爬蟲爬取到了想要的數據,體驗了數據抓取的樂趣。藉此良機,在這裏我想簡單總結整理一下我所學到的以及此次直播聽到的關於爬蟲的全部知識,有什麼地方不夠準確,歡迎你們指正,相互學習。(哭,在崔神寫完以後發佈,壓力很大的,參考部分很多,畢竟主要按崔神思路來寫的,崔神分享連接:juejin.im/post/5bce82…html
文章分爲六部分,按照崔老師的思路講下去,同時穿插我的補充python
這一部分主要講的是怎麼才能拿到想要的數據源正則表達式
主要分爲兩種:算法
針對不一樣類型,解決方法天然不一樣數據庫
對於第一種服務端渲染類型,直接經過各類庫請求拿到HTML頁面便可(數據在HTML頁面上) 這裏列舉以下庫可作參考研究深刻:json
此種情形通常是用第一種方法沒法請求查看到想要抓取的數據,採用如下四種方法瀏覽器
AJAX 是一種用於建立快速動態網頁的技術。經過在後臺與服務器進行少許數據交換,AJAX 可使網頁實現異步更新。這意味着能夠在不從新加載整個網頁的狀況下,對網頁的某部分進行更新。有不少使用 AJAX的應用程序案例:新浪微博、Google 地圖、開心網等等。服務器
解決方法:多線程
直接使用 Chrome/Firefox 的開發者工具直接查看 Ajax 具體的請求方式、參數等內容,而後用 HTTP 請求庫模擬便可架構
另外還能夠經過設置代理抓包來查看接口,如 Fiddler/Charles
適用於網頁接口和邏輯較複雜的狀況
使用 Selenium、Splinter、Spynner、pyppeteer、PhantomJS、Splash、requests-html 等來實現
此種狀況數據隱藏在JavaSript變量中,直接利用正則表達式等方式提取解析便可
直接模擬瀏覽器執行效率低,能夠經過執行JavaScript完成數據獲取,經過Selenium、PyExecJS、PyV八、js2py 等庫幫助完成
抓取HTTP/HTTPS數據包,利用 Charles、Fiddler、mitmproxy軟件
接口的參數通過加密,每次請求有隨機生成的token 一是能夠實時處理,利用 Fiddler、mitmdump、Xposed 等,其次能夠是將加密邏輯破解,直接模擬構造規則便可,還能夠直接反編譯破解。
接口返回結果通過加密
1.利用Appium,可見便可爬,相似Selenium 2.Xposed 使用hook來獲取結果 3.反編譯 找出使用的加密算法,模擬便可 4.改寫手機底層操做系統源碼
利用WireShark抓取全部協議包 利用Tcpdunp抓取TCP數據包
數據源拿到了,不少地方無用信息太多,須要咱們進一步進行數據清洗加工
HTML頁面數據 利用四大種數據解析方法,(在相應的庫中都會提供),Xpath,CSS,正則表達式,Selector,這些解析都有各自的解析規則,每一個拿些例子用用就記住會用了,推薦用Xpath
其餘類型 對於接口返回的json,xml類型,直接用json,xml2dict庫處理便可
以上解析都是每次爬取一個網頁數據,就要從新構造數據解析規則,甚是繁瑣麻煩,若是數據量不大,本身複製粘貼都比較方便,那樣有沒有一種方法解決這個問題呢
機器學習大展身手的今天,爬蟲領域也有它的身影。因而有了智能解析!
下面分爲四個方法進行了劃分:
固然如今機器學習算法的準確率還不能達到100%,會有數據出錯,水比較深
數據解析下來後,數據就得存儲起來,能夠做爲數據挖掘和機器學習的數據源,這裏說一下常見的存儲方式
從請求數據源到清洗解析數據,最後到存儲,這個爬蟲的基本三部就這樣結束了,用python的各類庫,是否是以爲很亂,下面我就簡單說說關於爬蟲的框架,這些開源的爬蟲框架把複雜的問題解決掉,而後封裝,提供各類類函數讓咱們用的很簡單、方便,沒必要考慮那些URL去重、代理、線程池管理等等問題,每次開發只須要着重考慮抓取邏輯,可是想入手框架,有必定門檻,建議看看源碼,多想一想他們的設計思想以及實現邏輯。
以上是一些經常使用框架的對比圖,沒有絕對的好壞,不一樣的框架需求點不一樣最近學習了scrapy框架,所以在這裏總結一下主要的邏輯圖,不細說 先上邏輯圖
主要的邏輯步驟八步(由標號1開始到8):以上即是主要scrapy框架邏輯,其中MIDDLEWARE稱爲中間件,分爲downloader middleware(用以另外處理requests和response對象)和spider middleware(一個Scrapy的spider處理機制的鉤子框架,你能夠插入自定義的功能用來處理engine發往spider的response和spider發往engine的request和item)
scrapy框架博大精深,持續挖掘中。。。。。
隨着公司對本身數據的保護意識不斷提升,如今不少小公司網站都已經添加反爬檢測,爬蟲能夠說是愈來愈不容易
防爬方式有非瀏覽器檢測,封IP,封帳號,字體反爬等
爬久了會拒絕服務請求,可經過交替更換ip爬取,用代理解決,能夠分爲幾種狀況來處理:
數據量大時候,高效快速爬取是當下的關鍵問題
最後捧上崔神總結的腦圖,致敬崔神!
最後我想說一下本身的感覺,當初學爬蟲就是爲了爬取數據自動化生成表格,解決生活中的繁雜重複無心義的事,機緣巧合竟在其中尋找到了一些樂趣成就感,深刻學習了很多,想把爬蟲做爲之後的主要方向,但隨着我不斷地瞭解認識到現在爬蟲的前景不是特別明朗,而後因爲不少方面緣由吧,也是參考崔神建議,最終決定把爬蟲做爲興趣做爲一個支線帶着作一作,會一如既往地繼續學習研究下去,由於我知道抓取大量數據那種成就感是貨真價實,是無關乎任何外界因素的我的,全部若是你們也有一樣的糾結疑慮,但願個人分享能夠給你一些參考,沒事的時候,讓咱們拋下一切,迴歸當初學爬蟲的心態,多爬爬數據,感覺其中的魅力。