• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#网络爬虫代码分享 C#简单的爬取工具

C#网络爬虫代码分享 C#简单的爬取工具

作者:魇 字体:[增加 减小] 来源:互联网 时间:2017-05-28

魇 通过本文主要向大家介绍了欲情 c max,维生素c,crh2c,奔驰c200,85度c加盟等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

公司编辑妹子需要爬取网页内容,叫我帮忙做了一简单的爬取工具

这是爬取网页内容,像是这对大家来说都是不难得,但是在这里有一些小改动,代码献上,大家参考

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; 
    }
</div>

这是根据url爬取网页远吗,有一些小改动,很多网页有不同的编码格式,甚至有些网站做了反爬取的防范,这个方法经过能够改动也能爬去 

以下是爬取网页所有的网址链接

 /// <summary> 
    /// 提取HTML代码中的网址 
    /// </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();//展示数据 
      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; 
    }
</div>

这块的技术其实就是简单的使用了正则去匹配!接下来献上获取标题,以及存储到xml文件的方法

/// <summary> 
    /// // 把网址写入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> 
    /// 获取网址的域名后缀 
    /// </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> 
    /// 获取标题 
    /// </summary> 
    /// <param name="html"></param> 
    /// <returns></returns> 
    private static string GetTi



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#利用ReportViewer生成报表
  • C#基于正则去掉注释的方法示例
  • C#中new的用法及与override的区别分析
  • C#实现两个richtextbox控件滚动条同步滚动的简单方法
  • C# for循环的经典案例集锦
  • C# 各种导出的方法总结
  • C#实现带百分比的进度条功能示例
  • C#使用浏览按钮获得文件路径和文件夹路径的方法
  • C#操作word的方法示例
  • C#使用WebClient登录网站并抓取登录后的网页信息实现方法

相关文章

  • 2017-05-28使用VS2010 C#开发ActiveX控件(下),完整代码打包下载
  • 2017-05-28C#中判断本地系统的网络连接状态的方法
  • 2017-05-28浅析JAVA中过滤器、监听器、拦截器的区别
  • 2017-05-28C#中数组初始化、反转和排序用法实例
  • 2017-05-28ActiveMQ在C#中的应用示例分析
  • 2017-05-28学习C#静态函数及变量的一个精典例子与代码
  • 2017-05-28c#详解datetime使用示例
  • 2017-05-28利用微软com组件mstscax.dll实现window7远程桌面功能
  • 2017-05-28C#.NET实现网页自动登录的方法
  • 2017-05-28C#计算输入汉字GBK编码后十六进制数输出的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 基于运算符重载的那些事
    • C# 4.0 大数的运算--BigInteger的应用详解
    • 二叉树的遍历算法(详细示例分析)
    • C# 泛型参数转换
    • C#动态创建Access数据库及表的方法
    • C#使用Shader实现夜幕降临倒计时的效果
    • C#操作 JSON方法汇总
    • 浅谈C#指针问题
    • C#画笔使用复合数组绘制单个矩形的方法
    • 详解如何选择使用ArrayList、HashTable、List、Dictionary数组

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有