最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#網(wǎng)絡(luò)爬蟲代碼分享 C#簡(jiǎn)單的爬取工具

 更新時(shí)間:2016年07月25日 14:41:06   作者:魘  
這篇文章主要為大家詳細(xì)介紹了C#網(wǎng)絡(luò)爬蟲代碼,教大家如何制作了簡(jiǎn)單的爬取工具,感興趣的小伙伴們可以參考一下

公司編輯妹子需要爬取網(wǎng)頁(yè)內(nèi)容,叫我?guī)兔ψ隽艘缓?jiǎn)單的爬取工具

這是爬取網(wǎng)頁(yè)內(nèi)容,像是這對(duì)大家來(lái)說(shuō)都是不難得,但是在這里有一些小改動(dòng),代碼獻(xiàn)上,大家參考

private string GetHttpWebRequest(string url) 
    { 
      HttpWebResponse result; 
      string strHTML = string.Empty; 
      try 
      { 
        Uri uri = new Uri(url); 
        WebRequest webReq = WebRequest.Create(uri); 
        WebResponse webRes = webReq.GetResponse(); 
 
        HttpWebRequest myReq = (HttpWebRequest)webReq; 
        myReq.UserAgent = "User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705"; 
        myReq.Accept = "*/*"; 
        myReq.KeepAlive = true; 
        myReq.Headers.Add("Accept-Language", "zh-cn,en-us;q=0.5"); 
        result = (HttpWebResponse)myReq.GetResponse(); 
        Stream receviceStream = result.GetResponseStream(); 
        StreamReader readerOfStream = new StreamReader(receviceStream, System.Text.Encoding.GetEncoding("utf-8")); 
        strHTML = readerOfStream.ReadToEnd(); 
        readerOfStream.Close(); 
        receviceStream.Close(); 
        result.Close(); 
      } 
      catch 
      { 
        Uri uri = new Uri(url); 
        WebRequest webReq = WebRequest.Create(uri); 
        HttpWebRequest myReq = (HttpWebRequest)webReq; 
        myReq.UserAgent = "User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705"; 
        myReq.Accept = "*/*"; 
        myReq.KeepAlive = true; 
        myReq.Headers.Add("Accept-Language", "zh-cn,en-us;q=0.5"); 
        //result = (HttpWebResponse)myReq.GetResponse(); 
        try 
        { 
          result = (HttpWebResponse)myReq.GetResponse(); 
        } 
        catch (WebException ex) 
        { 
          result = (HttpWebResponse)ex.Response; 
        } 
        Stream receviceStream = result.GetResponseStream(); 
        StreamReader readerOfStream = new StreamReader(receviceStream, System.Text.Encoding.GetEncoding("gb2312")); 
        strHTML = readerOfStream.ReadToEnd(); 
        readerOfStream.Close(); 
        receviceStream.Close(); 
        result.Close(); 
      } 
      return strHTML; 
    }

這是根據(jù)url爬取網(wǎng)頁(yè)遠(yuǎn)嗎,有一些小改動(dòng),很多網(wǎng)頁(yè)有不同的編碼格式,甚至有些網(wǎng)站做了反爬取的防范,這個(gè)方法經(jīng)過(guò)能夠改動(dòng)也能爬去 

以下是爬取網(wǎng)頁(yè)所有的網(wǎng)址鏈接

 /// <summary> 
    /// 提取HTML代碼中的網(wǎng)址 
    /// </summary> 
    /// <param name="htmlCode"></param> 
    /// <returns></returns> 
    private static List<string> GetHyperLinks(string htmlCode, string url) 
    { 
      ArrayList al = new ArrayList(); 
      bool IsGenxin = false; 
      StringBuilder weburlSB = new StringBuilder();//SQL 
      StringBuilder linkSb = new StringBuilder();//展示數(shù)據(jù) 
      List<string> Weburllistzx = new List<string>();//新增 
      List<string> Weburllist = new List<string>();//舊的 
      string ProductionContent = htmlCode; 
      Regex reg = new Regex(@"http(s)?://([\w-]+\.)+[\w-]+/?"); 
      string wangzhanyuming = reg.Match(url, 0).Value; 
      MatchCollection mc = Regex.Matches(ProductionContent.Replace("href=\"/", "href=\"" + wangzhanyuming).Replace("href='/", "href='" + wangzhanyuming).Replace("href=/", "href=" + wangzhanyuming).Replace("href=\"./", "href=\"" + wangzhanyuming), @"<[aA][^>]* href=[^>]*>", RegexOptions.Singleline); 
      int Index = 1; 
      foreach (Match m in mc) 
      { 
        MatchCollection mc1 = Regex.Matches(m.Value, @"[a-zA-z]+://[^\s]*", RegexOptions.Singleline); 
        if (mc1.Count > 0) 
        { 
          foreach (Match m1 in mc1) 
          { 
            string linkurlstr = string.Empty; 
            linkurlstr = m1.Value.Replace("\"", "").Replace("'", "").Replace(">", "").Replace(";", ""); 
            weburlSB.Append("$-$"); 
            weburlSB.Append(linkurlstr); 
            weburlSB.Append("$_$"); 
            if (!Weburllist.Contains(linkurlstr) && !Weburllistzx.Contains(linkurlstr)) 
            { 
              IsGenxin = true; 
              Weburllistzx.Add(linkurlstr); 
              linkSb.AppendFormat("{0}<br/>", linkurlstr); 
            } 
          } 
        } 
        else 
        { 
          if (m.Value.IndexOf("javascript") == -1) 
          { 
            string amstr = string.Empty; 
            string wangzhanxiangduilujin = string.Empty; 
            wangzhanxiangduilujin = url.Substring(0, url.LastIndexOf("/") + 1); 
            amstr = m.Value.Replace("href=\"", "href=\"" + wangzhanxiangduilujin).Replace("href='", "href='" + wangzhanxiangduilujin); 
            MatchCollection mc11 = Regex.Matches(amstr, @"[a-zA-z]+://[^\s]*", RegexOptions.Singleline); 
            foreach (Match m1 in mc11) 
            { 
              string linkurlstr = string.Empty; 
              linkurlstr = m1.Value.Replace("\"", "").Replace("'", "").Replace(">", "").Replace(";", ""); 
              weburlSB.Append("$-$"); 
              weburlSB.Append(linkurlstr); 
              weburlSB.Append("$_$"); 
              if (!Weburllist.Contains(linkurlstr) && !Weburllistzx.Contains(linkurlstr)) 
              { 
                IsGenxin = true; 
                Weburllistzx.Add(linkurlstr); 
                linkSb.AppendFormat("{0}<br/>", linkurlstr); 
              } 
            } 
          } 
        } 
        Index++; 
      } 
      return Weburllistzx; 
    }

這塊的技術(shù)其實(shí)就是簡(jiǎn)單的使用了正則去匹配!接下來(lái)獻(xiàn)上獲取標(biāo)題,以及存儲(chǔ)到xml文件的方法

/// <summary> 
    /// // 把網(wǎng)址寫入xml文件 
    /// </summary> 
    /// <param name="strURL"></param> 
    /// <param name="alHyperLinks"></param> 
    private static void WriteToXml(string strURL, List<string> alHyperLinks) 
    { 
      XmlTextWriter writer = new XmlTextWriter(@"D:\HyperLinks.xml", Encoding.UTF8); 
      writer.Formatting = Formatting.Indented; 
      writer.WriteStartDocument(false); 
      writer.WriteDocType("HyperLinks", null, "urls.dtd", null); 
      writer.WriteComment("提取自" + strURL + "的超鏈接"); 
      writer.WriteStartElement("HyperLinks"); 
      writer.WriteStartElement("HyperLinks", null); 
      writer.WriteAttributeString("DateTime", DateTime.Now.ToString()); 
      foreach (string str in alHyperLinks) 
      { 
        string title = GetDomain(str); 
        string body = str; 
        writer.WriteElementString(title, null, body); 
      } 
      writer.WriteEndElement(); 
      writer.WriteEndElement(); 
      writer.Flush(); 
      writer.Close(); 
    } 
    /// <summary> 
    /// 獲取網(wǎng)址的域名后綴 
    /// </summary> 
    /// <param name="strURL"></param> 
    /// <returns></returns> 
    private static string GetDomain(string strURL) 
    { 
      string retVal; 
      string strRegex = @"(\.com/|\.net/|\.cn/|\.org/|\.gov/)"; 
      Regex r = new Regex(strRegex, RegexOptions.IgnoreCase); 
      Match m = r.Match(strURL); 
      retVal = m.ToString(); 
      strRegex = @"\.|/$"; 
      retVal = Regex.Replace(retVal, strRegex, "").ToString(); 
      if (retVal == "") 
        retVal = "other"; 
      return retVal; 
    } 
/// <summary> 
    /// 獲取標(biāo)題 
    /// </summary> 
    /// <param name="html"></param> 
    /// <returns></returns> 
    private static string GetTitle(string html) 
    { 
      string titleFilter = @"<title>[\s\S]*?</title>"; 
      string h1Filter = @"<h1.*?>.*?</h1>"; 
      string clearFilter = @"<.*?>"; 
 
      string title = ""; 
      Match match = Regex.Match(html, titleFilter, RegexOptions.IgnoreCase); 
      if (match.Success) 
      { 
        title = Regex.Replace(match.Groups[0].Value, clearFilter, ""); 
      } 
 
      // 正文的標(biāo)題一般在h1中,比title中的標(biāo)題更干凈 
      match = Regex.Match(html, h1Filter, RegexOptions.IgnoreCase); 
      if (match.Success) 
      { 
        string h1 = Regex.Replace(match.Groups[0].Value, clearFilter, ""); 
        if (!String.IsNullOrEmpty(h1) && title.StartsWith(h1)) 
        { 
          title = h1; 
        } 
      } 
      return title; 
    }

這就是所用的全部方法,還是有很多需要改進(jìn)之處!大家如果有發(fā)現(xiàn)不足之處還請(qǐng)指出,謝謝!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用C#開發(fā)Socket通訊的方法

    使用C#開發(fā)Socket通訊的方法

    使用C#開發(fā)Socket通訊的方法...
    2007-04-04
  • C#調(diào)用7z實(shí)現(xiàn)文件的壓縮與解壓

    C#調(diào)用7z實(shí)現(xiàn)文件的壓縮與解壓

    這篇文章主要介紹了C#調(diào)用7z實(shí)現(xiàn)文件的壓縮與解壓,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • C#自定義控件指示燈效果

    C#自定義控件指示燈效果

    在C#中實(shí)現(xiàn)一個(gè)指示燈控件,可以通過(guò)GDI+技術(shù)繪制,首先使用Pen對(duì)象繪制外環(huán),然后用SolidBrush對(duì)象填充內(nèi)圓,通過(guò)RectangleF定義繪制和填充的邊界,控件的屬性包括顏色、間隙、外環(huán)寬度等,本文給大家介紹C#自定義控件指示燈效果,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • C#中調(diào)用VB中Inputbox類的實(shí)現(xiàn)方法

    C#中調(diào)用VB中Inputbox類的實(shí)現(xiàn)方法

    本文主要介紹在項(xiàng)目中引用Microsoft.VisualBasic,間接使用VB中的各種類庫(kù)的方法,或者自己創(chuàng)建函數(shù),調(diào)用自定義方法,以實(shí)現(xiàn)InputBox相關(guān)的功能。
    2016-05-05
  • C#實(shí)現(xiàn)文件夾的復(fù)制和刪除

    C#實(shí)現(xiàn)文件夾的復(fù)制和刪除

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)文件夾的復(fù)制和刪除功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • c#中合并DataTable重復(fù)行的值

    c#中合并DataTable重復(fù)行的值

    c#中合并DataTable重復(fù)行的值,需要的朋友可以參考一下
    2013-05-05
  • C# Csv實(shí)現(xiàn)基本的讀寫和轉(zhuǎn)換DataTable

    C# Csv實(shí)現(xiàn)基本的讀寫和轉(zhuǎn)換DataTable

    本文主要介紹了C# Csv實(shí)現(xiàn)基本的讀寫和轉(zhuǎn)換DataTable,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • C#實(shí)現(xiàn)歸并排序

    C#實(shí)現(xiàn)歸并排序

    這篇文章介紹了C#實(shí)現(xiàn)歸并排序的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#如何連接數(shù)據(jù)庫(kù)

    C#如何連接數(shù)據(jù)庫(kù)

    這篇文章主要介紹了C#如何連接數(shù)據(jù)庫(kù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • C#實(shí)現(xiàn)ComboBox變色的示例代碼

    C#實(shí)現(xiàn)ComboBox變色的示例代碼

    這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)ComboBox變色的效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01

最新評(píng)論

仁化县| 渑池县| 洪江市| 双江| 西宁市| 丽江市| 来凤县| 嘉荫县| 化隆| 革吉县| 延长县| 板桥市| 韶关市| 深水埗区| 容城县| 宿迁市| 苍梧县| 清河县| 新巴尔虎左旗| 阿克苏市| 新丰县| 汨罗市| 汉川市| 浠水县| 辽阳市| 平谷区| 察隅县| 马尔康县| 蓝山县| 聊城市| 淳安县| 兴和县| 莎车县| 新密市| 大同县| 滦南县| 昂仁县| 扎囊县| 新巴尔虎右旗| 庆安县| 保山市|