国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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
885
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美精品1区2区3区 欧洲一区在线 | 精品综合久久 | 欧美精品成人 | 欧美日韩精品在线观看 | 日韩精品无 | 久久国产精品视频 | 999这里只有是极品 最新中文字幕在线 | 亚洲一区视频 | 国产精品一区二区av | 国产福利在线视频 | 五月婷婷在线视频 | 国产精品久久久久久中文字 | 国产亚洲综合一区二区 | 精品国产资源 | 久久高清 | 亚洲精品久久久久一区二区三区 | 国产精品久久久久久中文字 | 日韩欧美中文在线观看 | 在线观看国产视频 | 精品美女久久久 | 国产黄色播放 | 日日操日日操 | 久久精品无码一区二区三区 | 狠狠搞狠狠操 | 亚洲免费视频网站 | 黄色在线免费看 | 成人av一区二区三区 | 国产精品亚洲视频 | www.久| 亚洲精品国产区欧美区在线 | 在线观看欧美一区 | 日韩有码在线播放 | www.久久精品 | 亚洲乱码国产乱码精品精的特点 | 天天操导航 | 成年片 | 免费一级片在线 | 欧美一区二区三 | 精品久久一区 | 成人视屏免费看 | 欧洲毛片|