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