端午節假期過了,以前一直在作出行準備,後面旅遊完又休息了一下,最近才恢復狀態。html
端午假期最後一天收到一個快遞,回去打開,發現是微信抽獎中的一本書,黃永祥的《實戰Python網絡爬蟲》。java
去各大網站搜了一下這我的,沒有名氣,去網購平臺看了他別的書的書評,總體來講,書都是拼湊的。。。python
可是既然書到手了,不妨翻開看看,恰好最近沒有什麼頭緒,又偏頭痛。花了幾個半天總體翻了一下這本書,感受是有點淺顯的。ajax
我以前用java寫過爬蟲,感受比較難的仍是反爬蟲這塊。這本書,我先看了第一個實戰項目,51job的,運行了代碼以後發現,哦,好吧,這個網站,貌似沒有反爬蟲機制?正則表達式
其實具體的爬取內容的方法各個網站也是差很少的。主要仍是反爬蟲這塊。可是書上內容很少,只有一個章節。redis
我的以爲,對於爬蟲新手,看一看每章的小結,仍是很能增加一些見識的。更深刻的技術,大概這本書是不能提供的。sql
後續有時間,我大概會摘錄一些小結放到這裏來吧~雖然沒什麼人看這裏。數據庫
網絡爬蟲
定義:自動抓取網絡信息瀏覽器
分類:緩存
- 通用網絡爬蟲/全網爬蟲:主要爲門戶站點搜索引擎和大型網站服務採集數據
- 聚焦網絡爬蟲/主題網絡爬蟲:選擇性地爬取主題相關的頁面
- 增量式網絡爬蟲:對已下載網頁採起增量式更新/只爬取新產生或已經發生變化的網頁
- 深層網絡爬蟲:內容不能經過靜態URL獲取/隱藏在搜索表單後/只有用戶提交一些關鍵詞才能得到的頁面
網站分析
- 找出數據來源:Doc、XHR、JS
- 找出數據所在請求,分析請求連接、請求方式、請求參數
- 肯定參數來源:固定可選值、經過別的請求生成、通過JS處理、特殊值
抓包工具:Fiddler
爬蟲庫:
- urllib
- requests:語法簡單,兼容python2和3
- requests_html:提供了數據清洗、ajax數據動態渲染
爬蟲緩存:requests_cache
requests_cache.install_cache(backend='memory')
存儲機制:
- memory:每次程序運行都會將緩存以字典形式保存在內存中
- sqlite:默認存儲機制
- redis:經過redis模塊實現數據庫的讀寫
- mongo:經過pymongo模塊實現數據庫的讀寫
網頁操控與數據爬取Selenium
手機App數據爬取Appium
驗證碼識別
- 人工識別
- ocr
- 調用第三方平臺API:在線人員、人工智能
數據清洗
- 字符串操做:截取、替換、查找、分割
- 正則表達式
- 第三方模塊/庫BeautifulSoup
分佈式爬蟲
併發庫concurrent.futures:ThreadPoolExecutor和ProcessPoolExecutor
反爬蟲技術
- 基於用戶請求的Headers→固定屬性+可變屬性
- 基於用戶操做網站的行爲→代理IP
- 基於網站目錄數據加載→模擬ajax請求
- 基於數據加密
- 基於驗證碼識別
- 基於請求參數
- 基於cookies→構建cookies池、代理IP、動態構建cookies、利用瀏覽器獲取cookies