爬蟲次日

- requests模塊的高級操做 - 代理 - 概念:代理服務器 - 做用:請求和響應的轉發 - 免費的代理 - www.goubanjia.com - 快代理 - 西祠代理 - 代理精靈(推薦)http://www.zhiliandaili.cn - 匿名度 - 透明:對方服務器知道你使用了代理,也知道你的真實的IP - 匿名:知道使用了代理,不知道你的真實IP - 高匿:不知道使用了代理,也不知道真實的IP - 類型: - http - https - 付費的代理: - 代理池:列表中存儲了多個字典,每一個字典{'http':'ip:port'} - 使用:get/post(proxies = {'http': 'ip:port'}) - cookie - 存儲在客戶端的鍵值對,可讓服務器端記錄客戶端的相關狀態。 - 如何處理cookie? - 手動處理:將抓包工具中的請求頭信息中的cookie鍵值拷貝到headers中 - 自動處理:session對象 - session對象:該對象和requests有相似的功能,該對象也能夠像requests同樣調用get/post進行請求發送。 若是使用session進行請求發送的過程當中產生了cookie,則cookie會被自動存儲到session對象中。 - 提升爬蟲爬取數據的效率 - 線程池 - 單線程+多任務異步協程 - 特殊的函數 - 若是async修飾了一個函數的定義,則該函數就變成了一個特殊的函數,特殊之處在於: - 特殊函數被調用後,函數內部的實現語句不會被當即執行。 - 該特殊函數調用後會給咱們返回一個協程對象 - 協程對象: 特殊函數調用後能夠返回一個協程對象 - 協程 == 特殊函數 - 任務對象:就是對協程對象的進一步封裝。就是一個高級的協程對象。 - 任務對象 == 協程對象 == 特殊的函數 - 綁定回調 - task.add_done_callback(parse) # parse就是函數 - parse的定義中 - parse必須有一個參數,該參數表示的就是回調函數對應的任務對象 - task.result():就是特殊函數的返回值 - 事件循環對象 - 該對象內部必須註冊的是任務對象,當事件循環開啓後,其內部註冊的任務對象就能夠基於異步被執行。 - [注意]:在特殊函數內部不能夠出現不支持異步模塊對應的代碼!!! - aiohttp:基於異步的網絡請求模塊 - pip install aiohttp - 編碼 - 基本架構 ```python with aiohttp.ClientSession() as s: # s就是一個請求對象 with s.get(url) as response: # get/post(url, data/params, headers, proxy='http://ip:port') page_text = response.text() # read() ==> content return page_text ``` - 補充細節 - 在每個with前加上async - 在每個阻塞操做前加await ```python async with aiohttp.ClientSession() as s: # s就是一個請求對象 async with await s.get(url) as response: # get/post(url, data/params, headers, proxy='http://ip:port') page_text = await response.text() # read() ==> content return page_text ``` - selenuim在爬蟲中的應用chromedriver.exe - 概念:是一個基於瀏覽器自動化的一個模塊。 - selenium爬蟲之間的關聯是什麼? - 便捷的獲取動態加載的數據(可見便可得) - 實現模擬登錄 - selenium的缺點 - 效率低 - 基本使用 - pip install selenium - 獲取瀏覽器的驅動程序 http://chromedriver.storage.googleapis.com/index.html - 動做鏈 - 概念:一組連續的行爲動做 - 無頭瀏覽器 - PhantomJs - 谷歌 - selenium的規避檢查 - Js注入 window.navigator.webdriver - 默認使用瀏覽器訪問值爲undefined - 使用selenium值爲true - 驗證碼的識別 - 超級鷹 http://www.chaojiying.com/about.html - 雲打碼 http://www.yundama.com/about.html - 超級鷹的使用流程 - 註冊 - 登陸:用戶中心的身份進行登陸 - 充值 - 建立一個軟件:軟件ID->生成一個軟件ID - 下載示例代碼:開發文檔-Python - 氣象數據爬取分析 https://www.aqistudy.cn/html/city_detail.html - 1.數據都是動態加載出來的 - 2.當點擊不通的選項卡的時候並無捕獲到數據包,意味着全部的數據都是在一開始的時候就被加載出來了。 - 3.當切換不通的查詢條件後,點擊搜索按鈕,抓包工具就能夠捕獲到氣象數據對應的數據包。 - url:https://www.aqistudy.cn/apinew/aqistudyapi.php <post>==>data:d - ajax請求 - 請求參數d,加密後的密文數據 - 經過火狐瀏覽器能夠找到搜索按鈕對應的監聽的事件,該事件觸發後執行的是getData函數 - 分析getData函數的實現 - type == 'HOUR' - 發現了getAQIData() 和getWeatherData()的調用 - 分析 getAQIData() 和getWeatherData() - 實現代碼幾乎一致,只有method的賦值不同(GETDETAIL/GETCITYWEATHER) - getServerData(method, param, )函數的調用 - param是一個字典,四組鍵值對(city, type,startTime, endTime)(查詢條件) - 分析getServerData的定義 - 抓包工具中進行getServerData的全局搜索,定位到該函數的實現 - 該函數的實現對應的代碼進行了JS混淆 - JS混淆:對原生的JS代碼進行加密 - 解決JS混淆的操做是JS反混淆 - 基於該網站進行反混淆:http://www.bm8.com.cn/jsConfusion/ - 終於找到了ajax請求對應的代碼: - 動態變化且加密的請求參數能夠由getParam(method,type) - decodeData(data);是將加密的響應結果進行解密 - PyExecJS介紹:PyExecJS是一個可使用Python來模擬運行Javascript的庫。 咱們須要pip install PyExecJS對其進行環境安裝。 - 必須事先安裝好nodejs環境 - 反爬機制: - robots - UA - 圖片懶加載 - 動態加載的數據 - 代理 - cookie - 驗證碼 - js混淆 - js加密 - selenium的規避檢測 - scrapy框架 - Windows: - a. pip3 install wheel - b. 下載twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted - c. 進入下載目錄,執行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl - d. pip3 install pywin32 - e. pip3 install scrapy
相關文章
相關標籤/搜索