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