- 爬蟲的分類 - 通用爬蟲: - 聚焦爬蟲: - 增量式: - 爬取圖片的兩種方式 - 使用requests - urllib模塊request中urlretrieve - 數據解析的基本原理 - 標籤的定位 - 取文本或取屬性 - xpath解析原理 - 實例化etree對象,且將源碼加載到該對象中 - 使用xpath方法結合着xpath表達式進行標籤訂位和數據提取 - 屬性定位[@attrName="value"] - 索引定位:[1] - / // - 取文本: /text() //text() - 取屬性:/@attrName - etree對象實例化的方式 - 本地加載:parse - 網絡加載:HTML - bs4解析原理 - .tagName 單數 - find(屬性定位) 單數 find('tagName',attrName="value") - find_all 複數 - Beautiful對象實例化方式 本地/網絡 soup.div soup() - 面試題:如何爬取攜帶標籤的指定頁面內容 bs4 text()/get_text()/string()
--------------------------------------------------------------
1 鏈接池報警 請求頭改 Connection: keep-alive 爲close
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
2 代理IP 在IP被封禁後 3 每次請求之間sleep進行間隔等待
---------------------------------------------------------------
驗證碼識別:雲打碼平臺 http://www.yundama.com/ 打碼兔 超級鷹
使用流程:
註冊
登錄:
普通用戶:
查詢剩餘提分(充值) http://www.yundama.com/price.html
開發者用戶:
建立軟件:個人軟件-》添加新軟件(ID,祕鑰)
下載示例代碼:開發文檔-》點此下載:雲打碼接口DLL-》PythonHTTP示例下載
--------------------------------------------------------------------
代理:代理服務器
- 快代理 - 西祠代理 - goubanjia 匿名度: 透明:對方服務器知道你使用了代理ip也知道你的真實ip 匿名:知道你使用了代理ip可是不知道你的真實ip 高匿:什麼都不知道 類型: http:只能夠發起http請求 https:只能夠發起https的請求
-------------------------------------------------------------
import requests import asyncio requests.get requests.post 1 掌握哪些基於爬蟲的模塊 urllb requests 重點 - 發起請求的參數 url headers data/params proxies 代理IP = {'http://':'ip:port'} - get請求 post請求 ajax的get ajax的post - 獲取響應數據: - text - content 流 - json() - encoding = 'xxx' - requests處理cookie - 手動 - 自動 : session = requests.Session() 雪球網/58二手房 - 如何提高requests爬取效率 - 多線程 - 線程池 - 單線程+異步協程 aio aiohttp 異步的網絡請求模塊 - asyncio - 事件循環loop 無限循環 遇到阻塞就輪詢下面的 - 協程對象: async 修飾的函數的定義,函數調用後會返回一個協程對象 一個特殊函數的返回值 - 任務對象: 就是對協程對象的進一步封裝 - await 須要手動掛起 async 2 常見的數據解析方法 - re - xpath 用熟練 - bs4 美麗湯 - pyquery 解析步驟: 標籤訂位 數據解析
selenuim: 瀏覽器自動化的模塊 做用 : 便捷的獲取動態加載的數據 模擬登錄 弊端 : 效率低下 使用流程: 實例化瀏覽器對象 find系列函數 標籤訂位 click() send_keys()數據交互 page_source(),excute_script(Jscode) switch_to.frame('iframe標籤的id值)函數:切換做用域, 若是使用find系列 動做鏈 : 滑動 觸發一系列的連續動做 ActionChains
phantomJs : 無視界瀏覽器
谷歌無頭
規避被檢測的風險 http://www.javashuo.com/article/p-ofuijkpo-ek.html
- pyppeteer chromium asyncio
3 列舉爬蟲中與遇到的比較可貴反爬機制 robots UA 檢測 驗證碼 cookie 代理 token(請求的動態參數) 古詩文網 post動態參數 動態數據加載 *** 圖片懶加載 數據加密 base64 解密 4 如何抓取動態加載數據 - ajax 動態請求的 - js 動態生成的 selenuim 5 移動端數據抓取 - fiddler - 青花瓷 - mitproxy 先手機裝證書 6 抓取過哪些類型的數據,量級多少? 新聞資訊 財經數據(金融產品 ) 設備參數 7 瞭解哪些爬蟲框架? pyspider(封裝了一個可視化) 8 談談對scrapy的瞭解
項目建立流程 持久化存儲 基於終端指令 基於管道 管道持久化存儲編碼流程 數據解析 對item的類進行相關的屬性定義 將解析到的數據封裝到item類型的對象中 將item提交給管道 在管道中進行持久化存儲的操做 在配置文件中開啓管道 注意事項 一個管道類對應一個存儲的載體 process_item方法中的返回值是item. 這個返回值會給下一個即將被執行的管道類 處理分頁數據爬取: 手動 yeild scrapy.Request(url,callback) post請求: yeild scrapy.FormRequest(url,callback,formdata) #模擬登錄用 cookie處理: 默認自動處理 日誌等級: LOG_LEVEL = 'EEROR' 請求傳參: 使用場景: 當爬取得數據沒有在同一張頁面的時候 請求傳參傳遞的是item對象 yeild scrapy.Request(url,callback,meta={'item':item}) callback : item = response.meta['item'] 五大核心組件 -- 引擎做用 - 處理全部數據流 觸發事務 下載中間件 - 做用: 批量攔截scrapy中全部的請求和響應 中間件類經常使用的方法: process_request : 攔截全部正常的請求 process_response : 攔截全部的響應 process_exception : 攔截全部的異常請求. 攔截請求: UA 假裝 IP 代理設定 攔截響應: 修改響應數據,篡改響應對象 selenium 在scrapy 中的應用: crawlSpider: 子類 用做全站數據爬取的 連接提取器 LinkExtracter(allow='正則'): 能夠根據指定的規則(allow='正則') 進行連接的提取 規則解析器Rule(LinkExtracter,callback,follow=True) 分佈式 原生的不能實現的緣由? 管道 調度器 都不能共享 scrapy-redis實現 增量式 : 去重 監測
- 高效的網絡請求 下載 - 高性能的持久化存儲 數據解析 中間件 - twisted 基於異步的模塊 9 如何解析出攜帶標籤的局部頁面數據 使用bs4 10 scrapy 核心組件 11 中間件的使用 UA池 IP池 下載中間件 12 如何實現全站數據爬取 - Spider 手動請求 遞歸調用 - CrawSpider 連接提取器 規則 13 如何檢測網站數據更新? - 增量式 14 分佈式實現原理 - scrapy-redis 組件 15 如何提高爬取數據的效率 (異步爬蟲) - 增長併發 - 禁止cookie - 禁止重試 - 減小下載超時 - 下降日誌等級 16 列舉你接觸的反爬機制 17 scrapy如何實現持久化存儲 - 管道 18 談談對crawlspider的理解,如何使用其進行深度爬取 - link - rule 19 如何實現數據清洗? - 清洗空值 - dropna - fillna - 清洗重複值 - drop_duplications(keep) - 清洗異常值 - 指定一個斷定異常值的條件 20 瞭解過機器學習嗎? - sklearn 先階段只停留在應用層面