- 張曉波 15027900535 https://www.cnblogs.com/bobo-zhang/ - 爬蟲: - requests - 基本使用 - 數據解析 - requets模塊的高級 - 單線程+多任務異步協程 - selenium - scrapy框架 - 經常使用且重要的功能 - 數據分析: - numpy - pandas - matplotlib - 爬蟲day01 - 1.什麼是爬蟲? - 就是經過編寫程序模擬瀏覽器上網,而後讓其去互聯網上獲取數據的過程 - 爬蟲的分類: - 通用爬蟲:爬取的是一整張頁面源碼數據 - 聚焦爬蟲:爬取頁面中局部的內容. - 關聯:聚焦是創建在通用爬蟲基礎之上 - 增量式爬蟲: - 用來檢測網站數據更新的狀況,從而爬取到網站中最新更新出來的數據. - 反爬機制:對應的載體是門戶網站.網站中能夠指定相關的機制防止爬蟲程序對其網站中的數據進行爬取 - 反反爬策略:對應的載體是爬蟲程序.爬蟲程序能夠破解網站採起的反爬機制,從而使得爬蟲程序能夠爬取到數據 - 第一個反爬機制:robots.txt協議 - User-Agent:請求載體的身份標識 - 特性:文本協議.防君子不防小人 - 2.requests模塊 - 環境的安裝:pip install requests - requests做用: - 用於模擬瀏覽器發起網絡請求.requests模塊能夠幫助咱們很好的實現爬蟲 - requests的編碼流程: - 1.指定url - 2.發起了請求 - 3.獲取響應數據 - 4.持久化存儲 - 參數動態化:get(params) - UA假裝:get(headers) - 注意:UA檢測被應用在了絕大數的網站中,所以後續全部的需求中咱們最好都應用下UA假裝操做 - 動態加載的數據: - 是由另外一個單獨的請求請求到的數據 - 特性:可見非可得 - 如何鑑定一個網站中的相關數據是否爲動態加載的數據? - 使用抓包工具作局部搜索 - 能夠搜索到:數據不是動態加載的 - 搜不到:是動態加載的 - 如何鑑定出數據爲動態加載,如何捕獲動態加載的數據呢? - 在抓包工具中作全局搜索,從定位到的數據包中提取url和請求參數,對其進行請求發送便可 數據解析: - 正則表達式 - bs4 - xpath - 數據解析的通用原理 - 概念:數據解析就是將爬取到的頁面源碼中指定的內容進行提取 - 做用:用來實現聚焦爬蟲(將頁面中局部的數據進行提取) - 原理: - 頁面中數據是存儲在哪裏的? - 存在於某個標籤之中 - 存在於標籤的屬性中 - 1.定位標籤 - 2.數據的提取 - 正則表達式實現的數據解析 - 定位標籤 - 數據的提取 - bs4解析 - 解析原理: - 1.實例化一個BeautifulSoup的對象,而後把即將被解析的頁面源碼數據加載到該對象中 - 2.調用該對象中的相關方法和屬性實現標籤訂位和數據的提取 - BeautifulSoup對象的實例化: - BeautifulSoup(fp,'lxml'):將本地存儲的html文檔中的數據進行解析 - BeautifulSoup(page_text,'lxml'):將互聯網請求到的頁面源碼數據進行解析 - lxml:一種解析器 - 環境的安裝: - pip install bs4 - pip install lxml - 標籤訂位: - soup.tagName:定位到第一次出現的tagName標籤 - 屬性定位find('tagName',attrName='value'),find只能夠定位到符合要求的第一個標籤 - find_all() - select(選擇器): id,class,tag,層級選擇器(>表示一個層級,空格表示多個層級) - 取文本 - text:獲取的是標籤下面全部的文本內容 - string:獲取的標籤的直系文本內容 - 取屬性: - tag[attrName] - xpath解析 - 解析原理: - 1.實例化一個etree類型的對象,把即將被解析的頁面源碼數據加載到該對象中 - 2.調用該對象中的xpath方法結合着不一樣形式的xpath表達式進行標籤訂位和數據提取 - etree對象的實例化 - etree.parse(filePath) - etree.HTML(page_text) - 環境的安裝: - pip install lxml - html文檔中標籤是符合樹狀結構的 - 標籤的定位: #最左側的/:表示xpath表達式必須從根節點進行標籤訂位 #非最左側的/:表示一個層級 #最左側是//:從任意位置進行標籤訂位 #非最左側的//:多個層級 # print(tree.xpath('/html/head/title')) # print(tree.xpath('/html//title')) # print(tree.xpath('//title')) - 取文本 - /text() - //text() - 取屬性 - tag/@attrName #屬性定位://tag[@attrName="value"] # print(tree.xpath('//div[@class="song"]')) #索引定位:xpath中的索引是從1開始 # print(tree.xpath('//div[@class="tang"]/ul/li[1]')) - 注意:xpath表達式的管道符的使用 - 做用:提高xpath表達式的通用性 xpath('//div/span/text() | //a/span/p/text()') - 反爬機制: - robots - UA檢測:UA假裝 - 動態加載數據的捕獲:抓包工具的全局搜索 - 圖片懶加載:僞屬性(src2) - 做業: - 一種形式的全站數據的爬取:將網頁中全部頁碼對應的數據進行爬取:http://sc.chinaz.com/jianli/free.html - 站長素材中的免費簡歷模板進行爬取:前五頁 - 下週六: - requests的高級操做 - 驗證碼的識別 - 模擬登錄 - 代理 - cookie - 線程池 - 單線程+_多任務異步協程(協程asycio) - selenium