端午節假期過了,之前一直在做出行准備,后面旅游完又休息了一下,最近才恢復狀態。
端午假期最后一天收到一個快遞,回去打開,發現是微信抽獎中的一本書,黃永祥的《實戰Python網絡爬蟲》。
去各大網站搜了一下這個人,沒有名氣,去網購平台看了他別的書的書評,整體來說,書都是拼湊的。。。
但是既然書到手了,不妨翻開看看,剛好最近沒有什么頭緒,又偏頭痛。花了幾個半天整體翻了一下這本書,感覺是有點淺顯的。
我之前用java寫過爬蟲,感覺比較難的還是反爬蟲這塊。這本書,我先看了第一個實戰項目,51job的,運行了代碼之后發現,哦,好吧,這個網站,貌似沒有反爬蟲機制?
其實具體的爬取內容的方法各個網站也是差不多的。主要還是反爬蟲這塊。但是書上內容不多,只有一個章節。
個人覺得,對於爬蟲新手,看一看每章的小結,還是很能增長一些見識的。更深入的技術,大概這本書是不能提供的。
后續有時間,我大概會摘錄一些小結放到這里來吧~雖然沒什么人看這里。
網絡爬蟲
定義:自動抓取網絡信息
分類:
- 通用網絡爬蟲/全網爬蟲:主要為門戶站點搜索引擎和大型網站服務采集數據
- 聚焦網絡爬蟲/主題網絡爬蟲:選擇性地爬取主題相關的頁面
- 增量式網絡爬蟲:對已下載網頁采取增量式更新/只爬取新產生或已經發生變化的網頁
- 深層網絡爬蟲:內容不能通過靜態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