一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - 利用C#實現最基本的小說爬蟲示例代碼

利用C#實現最基本的小說爬蟲示例代碼

2022-01-24 13:43XinYiBuFang C#

最近在學習c#,碰巧遇到個小說站不錯,就索性當個練習,所以這篇文章主要給大家介紹了關于利用C#實現最基本的小說爬蟲的相關資料,文中給出了詳細的示例代碼供大家參考學習,需要的朋友們下面隨著小編來一起學習學習吧。

前言

作為一個新手,最近在學習c#,自己折騰弄了個簡單的小說爬蟲,實現了把小說內容爬下來寫入txt,還只能爬指定網站。

第一次搞爬蟲,涉及到了網絡協議,正則表達式,弄得手忙腳亂跑起來效率還差勁,慢慢改吧。下面話不多說了,來一起看看詳細的介紹吧。

爬的目標:http://www.166xs.com/xiaoshuo/83/83557/

利用C#實現最基本的小說爬蟲示例代碼

利用C#實現最基本的小說爬蟲示例代碼

利用C#實現最基本的小說爬蟲示例代碼

一、先寫httpwebrequest把網站扒下來

這里有幾個坑,大概說下:

第一個就是記得弄個代理ip爬網站,第一次忘了弄代理然后ip就被封了。。。。。

第二個就是要判斷網頁是否壓縮,第一次沒弄結果各種轉碼gbk utf都是亂碼。后面解壓就好了。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/// <summary>
  /// 抓取網頁并轉碼
  /// </summary>
  /// <param name="url"></param>
  /// <param name="post_parament"></param>
  /// <returns></returns>
  public string httpget(string url, string post_parament)
  {
   string html;
   httpwebrequest web_request = (httpwebrequest)webrequest.create(url);
   web_request.timeout = 30000;
   web_request.method = "get";
   web_request.useragent = "mozilla/4.0";
   web_request.headers.add("accept-encoding", "gzip, deflate");
   //web_request.credentials = credentialcache.defaultcredentials;
 
   //設置代理屬性webproxy-------------------------------------------------
   webproxy proxy = new webproxy("111.13.7.120", 80);
   //在發起http請求前將proxy賦值給httpwebrequest的proxy屬性
   web_request.proxy = proxy;
 
   httpwebresponse web_response = (httpwebresponse)web_request.getresponse();
 
   if (web_response.contentencoding.tolower() == "gzip"// 如果使用了gzip則先解壓
   {
    using (stream stream_receive = web_response.getresponsestream())
    {
     using (var zip_stream = new gzipstream(stream_receive, compressionmode.decompress))
     {
      using (streamreader stream_reader = new streamreader(zip_stream, encoding.default))
      {
       html = stream_reader.readtoend();
      }
     }
    }
   }
   else
   {
    using (stream stream_receive = web_response.getresponsestream())
    {
     using (streamreader stream_reader = new streamreader(stream_receive, encoding.default))
     {
      html = stream_reader.readtoend();
     }
    }
   }
 
   return html;
  }

二、下面就是用正則處理內容了,由于正則表達式不熟悉所以重復動作太多。

1.先獲取網頁內容

?
1
2
iwebhttprepository webhttprepository = new webhttprepository();
  string html = webhttprepository.httpget(url_txt.text, "");

2.獲取書名和文章列表

書名

利用C#實現最基本的小說爬蟲示例代碼

文章列表

利用C#實現最基本的小說爬蟲示例代碼

?
1
2
3
4
5
6
7
8
string novel_name = regex.match(html, @"(?<=<h1>)([\s\s]*?)(?=</h1>)").value; //獲取書名
 
   regex regex_menu = new regex(@"(?is)(?<=<dl class=""book_list"">).+?(?=</dl>)");
   string result_menu = regex_menu.match(html).value; //獲取列表內容
 
 
   regex regex_list = new regex(@"(?is)(?<=<dd>).+?(?=</dd>)");
   var result_list = regex_list.matches(result_menu); //獲取列表集合

3.因為章節列表前面有多余的<dd>,所以要剔除

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int i = 0; //計數
   string menu_content = ""; //所有章節
   foreach (var x in result_list)
   {
    if (i < 4)
    {
     //前面五個都不是章節列表,所以剔除
    }
    else
    {
     menu_content += x.tostring();
    }
    i++;
   }

4.然后獲取<a>的href和innerhtml,然后遍歷訪問獲得內容和章節名稱并處理,然后寫入txt

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
regex regex_href = new regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>");
   matchcollection result_match_list = regex_href.matches(menu_content); //獲取href鏈接和a標簽 innerhtml
 
   string novel_path = directory.getcurrentdirectory() + "\\novel\\" + novel_name + ".txt"//小說地址
   file.create(novel_path).close();
   streamwriter write_content = new streamwriter(novel_path);
 
 
   foreach (match result_single in result_match_list)
   {
    string url_text = result_single.groups["url"].value;
    string content_text = result_single.groups["text"].value;
 
    string content_html = webhttprepository.httpget(url_txt.text + url_text, "");//獲取內容頁
 
    regex rege_content = new regex(@"(?is)(?<=<p class=""book_text"">).+?(?=</p>)");
    string result_content = rege_content.match(content_html).value; //獲取文章內容
 
 
    regex regex_main = new regex(@"(    )(.*)");
    string rsult_main = regex_main.match(result_content).value; //正文  
    string screen_content = rsult_main.replace(" ", "").replace("<br />", "\r\n");
 
    write_content.writeline(content_text + "\r\n");//寫入標題
    write_content.writeline(screen_content);//寫入內容
   }
 
 
   write_content.dispose();
   write_content.close();
   messagebox.show(novel_name+".txt 創建成功!");
   system.diagnostics.process.start(directory.getcurrentdirectory() + \\novel\\);

三、小說寫入成功

利用C#實現最基本的小說爬蟲示例代碼

利用C#實現最基本的小說爬蟲示例代碼

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://www.cnblogs.com/xinyibufang/p/7615400.html

延伸 · 閱讀

精彩推薦
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
主站蜘蛛池模板: www.91在线| 国产精品午夜国产小视频 | 男同互操 | 国产精选之刘婷野战 | 动漫美丽妇人1~2在线看 | 久草色视频 | 香蕉97超级碰碰碰免费公 | 电车痴汉(han) | 男人曰女人 | 国产激情影院 | 国产婷婷综合丁香亚洲欧洲 | free service性v极品 | 日韩免费视频播播 | 18性夜影院午夜寂寞影院免费 | 青久久 | 91久久国产露脸精品 | 亚洲国产精品久久精品成人网站 | 精品在线视频一区 | 国产精品欧美韩国日本久久 | 日韩精品一区二区三区老鸭窝 | 欧美xxoo黑人又粗暴 | 亚洲精品一二三四 | 99视频在线观看免费视频 | 99久久er这里只有精品17 | 小女生RAPPER入口 | 国产大片51精品免费观看 | 刺客女仆 | 国产巨大bbbb俄罗斯 | 奇米社区 | 日韩伦理在线观看 | 午夜精品在线 | 国产女主播福利在线 | 青青久久精品国产 | 亚洲欧美精品一区二区 | 给我一个黄色网址 | 亚州中文字幕 | gaygayas男男免费中国 | 婷婷色天使在线视频观看 | 天美传媒影视在线免费观看 | 国产午夜一区二区在线观看 | 亚洲AV久久无码精品蜜桃 |