網(wǎng)絡(luò)爬蟲原理與實踐:基于C#語言
定 價:79 元
叢書名:數(shù)據(jù)科學(xué)與工程技術(shù)叢書
- 作者:李健 種惠芳
- 出版時間:2022/12/1
- ISBN:9787111716945
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP311.561
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書基于C#語言介紹網(wǎng)絡(luò)爬蟲開發(fā)的基本原理、技巧和應(yīng)用實例,適合網(wǎng)絡(luò)爬蟲開發(fā)的愛好者和研究者閱讀。讀者*好具備一定的編程基礎(chǔ),或者正在學(xué)習(xí)C#編程,以便更好地理解本書的內(nèi)容。
本書具有以下特點:
1)內(nèi)容簡明、由淺入深。本書不追求內(nèi)容上的面面俱到,而是圍繞網(wǎng)絡(luò)爬蟲的核心環(huán)節(jié),介紹其基本原理和實現(xiàn)方法,并進行適當(dāng)?shù)墓δ軘U展。與其他同類書籍相比,本書篇幅適中,適合初學(xué)者閱讀。
2)實例豐富,代碼翔實。書中盡量選擇邏輯簡明、功能完整的典型實例,從需求、設(shè)計、實現(xiàn)的角度分別進行介紹。而且,幾乎所有實例都給出了主要實現(xiàn)代碼,并對關(guān)鍵代碼進行了詳細注釋,方便讀者進行實踐。
前 言
雖然Python爬蟲依靠強大的第三方庫能夠快速實現(xiàn)某些特定功能,但由于這些庫封裝的層次較高,隱藏了大量內(nèi)部細節(jié),使用者往往知其然而不知其所以然,遇到問題難以延展。學(xué)習(xí)基于C#的爬蟲開發(fā)雖然起步稍慢,但能夠更好地理解底層網(wǎng)絡(luò)原理和爬蟲架構(gòu);借助強大的VS平臺和C#優(yōu)秀的語言特性,更容易開發(fā)出專業(yè)級的可視化爬蟲工具。相對于Python的“人生苦短”,我們追求的是“詩和遠方”。
本書基于C#語言介紹網(wǎng)絡(luò)爬蟲開發(fā)的基本原理、技巧和應(yīng)用實例,適合網(wǎng)絡(luò)爬蟲開發(fā)的愛好者和研究者閱讀。讀者要是具備一定的編程基礎(chǔ),或者正在學(xué)習(xí)C#編程,能更好地理解本書的內(nèi)容。
本書具有以下特點:
1)內(nèi)容簡明、由淺入深。本書不追求內(nèi)容上的面面俱到,而是圍繞網(wǎng)絡(luò)爬蟲的核心環(huán)節(jié),介紹其基本原理和實現(xiàn)方法,并進行適當(dāng)?shù)墓δ軘U展。與其他同類書籍相比,本書篇幅適中,適合初學(xué)者閱讀。
2)實例豐富,代碼翔實。書中盡量選擇邏輯簡明、功能完整的典型實例,從需求、設(shè)計、實現(xiàn)的角度分別進行介紹。而且,幾乎所有實例都給出了主要實現(xiàn)代碼,并對關(guān)鍵代碼進行了詳細注釋,方便讀者進行實踐。
全書共分11章。第1章介紹網(wǎng)絡(luò)爬蟲的基礎(chǔ)知識,包括網(wǎng)絡(luò)、網(wǎng)頁和爬蟲概述;第2章簡要介紹C#編程,并側(cè)重與網(wǎng)絡(luò)爬蟲相關(guān)的內(nèi)容;第3章介紹網(wǎng)絡(luò)資源下載的方法,并實現(xiàn)通用資源下載器;第4章介紹網(wǎng)頁數(shù)據(jù)抽取的方法,重點實現(xiàn)HTML解析器;第5章介紹XML和JSON數(shù)據(jù)抽取的方法,從而獲得更豐富的目標(biāo)數(shù)據(jù);第6章介紹爬蟲數(shù)據(jù)的存儲,從而將采集結(jié)果保存到文件或數(shù)據(jù)庫;第7章介紹網(wǎng)絡(luò)爬蟲的搜索方式,包括深度優(yōu)先搜索和廣度優(yōu)先搜索,并實現(xiàn)爬蟲控制器;第8章介紹多線程爬蟲,并實現(xiàn)自定義線程池以提高爬蟲效率;第9章介紹如何使用代理服務(wù)器,并實現(xiàn)自定義代理池;第10章介紹常見的瀏覽器內(nèi)核,以及如何使用GeckoFx模擬瀏覽器獲取深層數(shù)據(jù);第11章介紹抽取模板的表示、管理以及可視化配置方法。
由于網(wǎng)站更新,一段時間后實例中的某些URL鏈接可能會失效,部分網(wǎng)頁結(jié)構(gòu)也會發(fā)生變化,此時相關(guān)實例需要做相應(yīng)的代碼調(diào)整才能正確運行。技術(shù)是中立的,本書所述內(nèi)容僅用于技術(shù)交流,任何人若將相關(guān)技術(shù)用于商業(yè)或其他用途,需自行承擔(dān)由此產(chǎn)生的影響和后果。
致謝
在本書即將出版之際,首先感謝我的合作者種惠芳老師,種老師專業(yè)過硬、認真負責(zé),承擔(dān)了大量撰寫工作;特別感謝恩師張克亮教授一直以來對我的指導(dǎo)和鼓勵;感謝易綿竹教授、馬延周副教授、唐亮副教授、王亞利副教授對本書提出的許多寶貴意見;感謝任靜靜老師、張婷老師、沈麗民老師、王帥鴿老師參與了本書初稿的校對。最后,感謝我的妻子趙盼,她對家庭雙倍的付出才讓我有時間完成本書。
限于作者的學(xué)識,書中難免有表述不當(dāng)或疏漏之處,懇請各位讀者指正。
李健
2022年5月
目 錄
前言
第1章 網(wǎng)絡(luò)爬蟲概述1
1.1 網(wǎng)絡(luò)基礎(chǔ)1
1.1.1 網(wǎng)絡(luò)的基本概念1
1.1.2 HTTP6
1.1.3 會話機制11
1.2 網(wǎng)頁知識14
1.2.1 HTML14
1.2.2 CSS17
1.2.3 JavaScript20
1.3 網(wǎng)絡(luò)爬蟲的原理22
1.3.1 網(wǎng)絡(luò)爬蟲概述22
1.3.2 Robots協(xié)議25
1.3.3 網(wǎng)絡(luò)爬蟲框架29
第2章 C#編程基礎(chǔ)31
2.1 C#語言概述31
2.1.1 C#與.NET框架31
2.1.2 開發(fā)環(huán)境33
2.1.3 語言生態(tài)37
2.2 數(shù)據(jù)和運算40
2.2.1 C#數(shù)據(jù)類型40
2.2.2 常用運算符45
2.3 流程控制50
2.3.1 分支結(jié)構(gòu)51
2.3.2 循環(huán)結(jié)構(gòu)54
2.4 常用數(shù)據(jù)結(jié)構(gòu)56
2.4.1 字符串56
2.4.2 數(shù)組60
2.4.3 列表62
2.4.4 字典65
第3章 網(wǎng)絡(luò)資源下載70
3.1 同步下載70
3.1.1 網(wǎng)頁下載70
3.1.2 編碼檢測72
3.1.3 參數(shù)設(shè)置76
3.2 異步下載83
3.2.1 實現(xiàn)方式83
3.2.2 性能分析85
3.3 通用資源下載器 86
3.3.1 下載器的設(shè)計86
3.3.2 下載器的實現(xiàn)88
第4章 網(wǎng)頁數(shù)據(jù)抽取95
4.1 正則表達式抽取95
4.1.1 正則表達式簡介95
4.1.2 使用Regex類97
4.2 XPath抽取100
4.2.1 XPath簡介100
4.2.2 使用HtmlAgilityPack103
4.3 HTML解析器107
4.4 綜合實例:新聞資訊爬蟲110
4.4.1 爬蟲設(shè)計110
4.4.2 爬蟲實現(xiàn)111
第5章 其他數(shù)據(jù)抽取119
5.1 XML數(shù)據(jù)抽取119
5.1.1 XML簡介119
5.1.2 使用System.Xml120
5.2 JSON數(shù)據(jù)抽取123
5.2.1 JSON簡介123
5.2.2 使用Newtonsoft.Json125
5.3 綜合實例1:天氣爬蟲128
5.3.1 問題描述與分析128
5.3.2 爬蟲設(shè)計131
5.3.3 爬蟲實現(xiàn)131
5.4 綜合實例2:音樂爬蟲136
5.4.1 問題描述136
5.4.2 逆向分析138
5.4.3 爬蟲設(shè)計141
5.4.4 爬蟲實現(xiàn)143
第6章 數(shù)據(jù)存儲150
6.1 數(shù)據(jù)的維度150
6.2 文件存儲151
6.2.1 低維數(shù)據(jù)存儲151
6.2.2 高維數(shù)據(jù)存儲154
6.3 數(shù)據(jù)庫存儲158
6.3.1 MySQL的安裝和配置158
6.3.2 將數(shù)據(jù)存入MySQL162
第7章 爬蟲控制167
7.1 爬蟲搜索方式167
7.1.1 深度優(yōu)先搜索167
7.1.2 廣度優(yōu)先搜索171
7.1.3 性能分析172
7.2 爬蟲控制器175
7.2.1 控制器設(shè)計175
7.2.2 控制器的實現(xiàn)176
7.2.3 實時控制器179
7.3 綜合實例:站內(nèi)文章爬蟲183
7.3.1 爬蟲設(shè)計183
7.3.2 爬蟲實現(xiàn)185
7.3.3 爬蟲測試186
第8章 多線程爬蟲189
8.1 多線程機制189
8.1.1 Thread對象189
8.1.2 BackgroundWorker控件192
8.1.3 系統(tǒng)線程池194
8.2 多線程爬蟲197
8.2.1 實現(xiàn)方法197
8.2.2 性能對比199
8.3 自定義線程池202
8.3.1 線程池設(shè)計202
8.3.2 線程池實現(xiàn)203
8.3.3 性能測試206
8.4 多線程爬蟲控制器207
8.4.1 多線程控制器實現(xiàn)207
8.4.2 訪問序列分析210
第9章 使用代理213
9.1 代理機制213
9.1.1 使用WebProxy對象213
9.1.2 使用全局代理215
9.2 自定義代理池217
9.2.1 代理池設(shè)計217
9.2.2 代理池實現(xiàn)218
第10章 模擬瀏覽器225
10.1 瀏覽器的工作原理225
10.1.1 網(wǎng)頁解析過程225
10.1.2 常見的瀏覽器內(nèi)核226
10.2 使用瀏覽器內(nèi)核226
10.2.1 Trident內(nèi)核226
10.2.2 Gecko內(nèi)核231
10.3 綜合實例:網(wǎng)頁翻譯爬蟲240
10.3.1 問題描述240
10.3.2 爬蟲設(shè)計241
10.3.3 爬蟲實現(xiàn)242
10.3.4 算法改進247
第11章 可視化模板配置250
11.1 可視化模板配置方法250
11.1.1 抽取原理250
11.1.2 模板表示253
11.1.3 可視化配置254
11.2 綜合實例:可視化網(wǎng)頁文章
爬蟲259
11.2.1 爬蟲設(shè)計259
11.2.2 爬蟲實現(xiàn)260
參考文獻264