本書主要以純案例驅動的形式,分別使用和結合使用requests庫、selenium庫,從互聯(lián)網上收集數(shù)據(jù)。主要內容包括收集靜態(tài)網頁數(shù)據(jù),網頁解析,JSON數(shù)據(jù),JSON解析,多級翻頁,cookie和session,驗證登錄,多線程,數(shù)據(jù)的存儲,收集到的數(shù)據(jù)包括靜態(tài)網頁數(shù)據(jù)、json、圖片、音頻、視頻等數(shù)據(jù),并對獲取的數(shù)據(jù)進行清洗。適合Python初學者,也適合研究Python的廣大科研人員、學者、工程技術人員。本教材采用純的案例,和簡單的注釋,其他一些先修的知識是在其他課程有開設。
從實戰(zhàn)出發(fā),適合初學者,緊跟 章節(jié)案例,理清代碼實現(xiàn),很快掌握編寫Python爬蟲程序。
現(xiàn)階段,隨著大數(shù)據(jù)和人工智能技術的研究不斷深入發(fā)展,網絡數(shù)據(jù)采集與清洗越來越具有較為廣泛的應用范圍。本書是為數(shù)據(jù)采集與清洗課程編寫的教材,其內容選取符合教學大綱要求,以案例驅動展開,兼顧內容的廣度和深度,適用面廣。
本書的第1章主要闡述網絡爬蟲的基本概念、基本流程、爬蟲合法性問題、反爬蟲技術以及爬蟲的預備知識。第2~9章主要講解爬蟲的各種技術,分別討論Requests庫、JSON數(shù)據(jù)爬取、XPath解析及網頁數(shù)據(jù)爬取、IP代理、Selenium庫、Selenium與Requests結合使用、異步爬蟲、正則表達式等基本技術的實現(xiàn); 爬取的內容包括HTML文檔、JSON數(shù)據(jù)、圖片、音頻、視頻,以及這些類型數(shù)據(jù)的持久化保存。第10章講解數(shù)據(jù)的簡單清洗。第11章講解一個綜合案例,結合Requests和Selenium,分別采用單線程和多線程實現(xiàn)對不同網站的數(shù)據(jù)爬取,并進行相應的數(shù)據(jù)清洗操作。
全書采用Python為主要描述語言。Python是一種面向對象的高級通用腳本編程語言,其語法簡潔,簡單易懂。相比其他語言,Python更容易配置,在字符處理方面靈活,并且在爬蟲程序開發(fā)中具有先天的優(yōu)勢,是開發(fā)者的首選編程語言。Python最初被用于編寫Shell(自動化腳本),伴隨著版本不斷更新以及語言新功能的加入,其作為爬蟲編程語言優(yōu)勢更加突出。因此,越來越多的開發(fā)者選擇Python用于大型爬蟲項目開發(fā)。Python自帶有多種爬取模板,可以利用Requests和Selenium第三方庫模擬人工瀏覽器訪問的行為,實現(xiàn)起來便捷; 爬蟲程序爬取網頁之后,需要對網頁進行諸如過濾標簽、提取文本等處理。Python擁有簡短的文檔處理功能,能夠用簡短代碼處理絕大部分文檔。
從課程性質上來講,數(shù)據(jù)采集與清洗是一門專業(yè)選修課,側重于應用。它的教學要求是: 理解互聯(lián)網大數(shù)據(jù)采集的主要技術; 掌握各種典型爬蟲的技術原理、技術框架、實現(xiàn)方法、主要開源包的使用; 理解對爬蟲采集到的網頁數(shù)據(jù)的處理方法及文本處理,并會使用Python進行技術實現(xiàn)。本書的學習過程通過案例驅動的方式展開,幫助讀者貫穿爬蟲、數(shù)據(jù)清洗的過程,培養(yǎng)讀者掌握從互聯(lián)網上采集數(shù)據(jù)的技術,能夠獨立完成數(shù)據(jù)采集和清洗工作,對培養(yǎng)學生的數(shù)據(jù)處理能力、信息分析與應用能力、信息表達能力具有重要作用,為后期的生產實習、畢業(yè)設計以及未來的工作奠定一定的實踐基礎。
本書內容以實戰(zhàn)為主,適合高等院校相關專業(yè)的學生閱讀,可以作為數(shù)據(jù)科學與大數(shù)據(jù)專業(yè)的本科或?平滩,也可以作為信息類相關專業(yè)的選修教材,也適合Python培訓機構作為實訓教材。講課學時可設置為30~40學時。本書文字通俗,簡單易懂,便于自學,也可供從事大數(shù)據(jù)處理等工作的科技人員參考。只需要掌握Python程序設計便可以學習本書。
配套資源
為了方便教學,本書配有微課視頻、教學課件、源代碼。
(1) 獲取微課視頻方式:
讀者可以先掃描本書封底的文泉云盤防盜碼,再掃描書中相應的視頻二維碼,即可觀看教學視頻。
(2) 其他資源可先掃描本書封底的文泉云盤防盜碼,再掃描下方二維碼,即可獲取。
教學課件
源代碼
韓瑩,防災科技學院教師,講授數(shù)據(jù)科學與大數(shù)據(jù)課程,本教材采用純的案例,和簡單的注釋,其他一些先修的知識是在其他課程有開設。
第1章緒論
1.1網絡爬蟲的基本概念
1.2網絡爬蟲的基本流程
1.2.1發(fā)起請求
1.2.2獲取響應內容
1.2.3解析內容
1.2.4持久化保存數(shù)據(jù)
1.3網絡爬蟲的合法性問題
1.4反爬蟲技術
1.4.1Useragent控制訪問
1.4.2IP限制訪問
1.4.3設置請求間隔
1.4.4通過參數(shù)加密和JavaScript腳本
1.4.5通過robots.txt來限制爬蟲
1.5網絡爬蟲的預備知識
1.5.1統(tǒng)一資源定位器
1.5.2超文本傳輸協(xié)議
1.5.3超文本標記語言
1.6開發(fā)語言和開發(fā)環(huán)境
1.6.1開發(fā)語言
1.6.2第三方請求庫
1.6.3開發(fā)工具
第2章Requests庫
2.1安裝Requests庫
2.2Requests庫發(fā)送請求
2.3查看響應內容
2.3.1查看響應狀態(tài)碼
2.3.2查看響應的文本信息
2.3.3解決亂碼問題
2.3.4二進制碼響應內容
2.3.5JSON響應內容
2.4定制請求頭部Headers
2.5Chrome瀏覽器開發(fā)者工具面板
2.5.1打開開發(fā)者工具面板
2.5.2Elements面板
2.5.3Network面板
2.6GET請求單個網頁的爬取案例
2.6.1不帶參數(shù)的GET請求
2.6.2攜帶參數(shù)的GET請求
第3章JSON數(shù)據(jù)爬取
3.1Ajax
3.1.1Ajax技術
3.1.2分析數(shù)據(jù)來源
3.2JSON
3.2.1JSON語法規(guī)則
3.2.2訪問JSON數(shù)據(jù)
3.2.3JSON文件讀寫操作
3.2.4JSON數(shù)據(jù)校驗和格式化
3.3Ajax異步動態(tài)加載的數(shù)據(jù)爬蟲
3.3.1帶參數(shù)的POST請求爬蟲
3.3.2多個網頁多鏈接GET請求爬蟲綜合案例
3.4POST請求的兩種參數(shù)格式
3.4.1Form Data類型
3.4.2Request Payload類型
第4章XPath解析及網頁數(shù)據(jù)爬取
4.1XPath簡介及安裝
4.2XPath節(jié)點
4.2.1基本值節(jié)點
4.2.2節(jié)點關系
4.3XPath語法
4.3.1選取節(jié)點語法
4.3.2謂語
4.3.3選取未知節(jié)點
4.3.4選取若干路徑
4.3.5初步使用XPath案例
4.4XPath表達式
4.4.1定位XPath搜索框
4.4.2在網頁上寫XPath表達式
4.5爬取HTML文檔數(shù)據(jù)案例
4.6爬取多頁HTML文檔數(shù)據(jù)案例
4.6.1翻頁在參數(shù)里
4.6.2翻頁在URL中
4.7圖片爬蟲案例
4.7.1單張圖片爬取
4.7.2多頁多幅圖片爬蟲案例
4.7.3多類多頁多圖爬蟲案例
第5章IP代理
5.1IP代理的作用
5.2IP代理使用方法
5.3搭建IP池
5.3.1獲取單頁IP
5.3.2獲取多頁IP
5.3.3檢測IP有效性
5.3.4建立IP池
5.4付費IP代理使用
第6章Selenium庫
6.1Selenium安裝及環(huán)境配置
6.1.1Selenium安裝
6.1.2環(huán)境配置
6.1.3環(huán)境測試
6.2Selenium簡單使用及配置
6.2.1打開網頁
6.2.2規(guī)避偽裝機制
6.2.3常見的配置項
6.3Selenium的元素定位操作
6.3.1查看頁面元素
6.3.2通過ID定位元素
6.3.3通過name定位元素
6.3.4通過class定位元素
6.3.5通過tag定位元素
6.3.6通過link定位元素
6.3.7通過partial_link定位元素
6.3.8通過XPath定位元素
6.3.9通過CSS定位元素
6.3.10通過By定位元素
6.4Selenium等待機制
6.4.1固定等待
6.4.2隱式等待
6.4.3顯式等待WebDriverWait
6.5Selenium控制瀏覽器
6.5.1瀏覽器的常見操作
6.5.2不同窗口之間切換
6.5.3鼠標事件
6.5.4鍵盤事件
6.5.5定位Frame/IFrame
6.5.6頁面下拉
6.5.7窗口截圖
6.5.8文件上傳
6.6Selenium爬蟲案例
6.6.1單頁爬取案例
6.6.2多頁爬取案例
第7章Requests與Selenium結合使用
7.1Selenium模擬登錄
7.1.1Selenium程序模擬登錄
7.1.2手動輸入數(shù)據(jù)模擬登錄
7.2Cookie與Session機制
7.2.1Cookie機制
7.2.2Session機制
7.3Requests、Cookie、Selenium結合使用
7.4Selenium和Requests結合下載音樂
7.4.1單首音樂下載
7.4.2多首音樂下載
第8章異步爬蟲
8.1基本概念
8.2串行下載多個視頻
8.3使用線程池下載多個視頻
8.3.1Multiprocessing
8.3.2Threading
8.4使用協(xié)程下載多個視頻
第9章正則表達式
9.1正則函數(shù)
9.1.1re.match函數(shù)
9.1.2re.search函數(shù)
9.1.3re.sub函數(shù)
9.1.4re.compile函數(shù)
9.1.5re.findall函數(shù)
9.1.6re.finditer函數(shù)
9.1.7re.split函數(shù)
9.2正則表達式模式及實例
9.3正則表達式實例
9.3.1匹配字符串
9.3.2匹配字符組
9.3.3區(qū)間匹配
9.3.4特殊字符匹配
9.3.5取反
9.3.6快捷匹配數(shù)字和字符
9.3.7匹配空白字符
9.3.8單詞邊界
9.3.9快捷方式取反
9.3.10開始和結束
9.3.11匹配任意字符
9.3.12可選字符
9.3.13重復
9.3.14重復區(qū)間
9.3.15開閉區(qū)間
9.4正則表達式進階
9.4.1分組
9.4.2或者條件
9.4.3分組的回溯引用
9.4.4斷言
第10章數(shù)據(jù)清洗
10.1數(shù)據(jù)分析流程
10.2數(shù)據(jù)清洗的概念及流程
10.3數(shù)據(jù)清洗常用方法
10.3.1讀取數(shù)據(jù)
10.3.2初步探索數(shù)據(jù)
10.3.3簡單處理數(shù)據(jù)
10.3.4重復值處理
10.3.5異常值處理
10.3.6處理缺失值
10.3.7爬取數(shù)據(jù)
10.3.8增加特征值
10.3.9格式與內容清洗
10.3.10數(shù)據(jù)持久化保存
第11章綜合爬蟲案例
11.1數(shù)據(jù)爬取
11.1.1單線程爬取前程無憂
11.1.2多線程爬取英才網
11.1.3多線程爬取前程無憂
11.2簡單數(shù)據(jù)清洗
11.2.1導入庫
11.2.2初識數(shù)據(jù)
11.2.3簡單數(shù)據(jù)處理
11.2.4處理重復值
11.2.5處理空值
11.2.6字段內容清洗
11.2.7提取并增加特征值
11.2.8處理異常值
11.2.9數(shù)據(jù)保存
參考文獻