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

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

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

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

这是根据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;
    }

这块的技术其实就是简单的使用了正则去匹配!接下来献上获取标题,以及存储到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 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, "");
      } 

      // 正文的标题一般在h1中,比title中的标题更干净
      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;
    }

这就是所用的全部方法,还是有很多需要改进之处!大家如果有发现不足之处还请指出,谢谢!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索C#网络爬虫
C#爬取工具
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-09-19 20:36:52

C#网络爬虫代码分享 C#简单的爬取工具_C#教程的相关文章

C#无限栏目分级程序代码分享 好东西第1/3页_C#教程

数据库表的结构必须有以下字段:  screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>各个字段的说明:screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; th

php爬虫:知乎用户数据爬取和分析

背景说明:小拽利用php的curl写的爬虫,实验性的爬取了知乎5w用户的基本信息:同时,针对爬取的数据,进行了简单的分析呈现.demo 地址 php的spider代码和用户dashboard的展现代码,整理后上传github,在个人博客和公众号更新代码库,程序仅供娱乐和学习交流:如果有侵犯知乎相关权益,请尽快联系本人删除. 无图无真相 移动端分析数据截图 pc端分析数据截图 整个爬取,分析,展现过程大概分如下几步,小拽将分别介绍 curl爬取知乎网页数据 正则分析知乎网页数据 数据数据入库和程序

Python实现爬取知乎神回复简单爬虫代码分享_python

看知乎的时候发现了一个 "如何正确地吐槽" 收藏夹,里面的一些神回复实在很搞笑,但是一页一页地看又有点麻烦,而且每次都要打开网页,于是想如果全部爬下来到一个文件里面,是不是看起来很爽,并且随时可以看到全部的,于是就开始动手了. 工具 1.Python 2.7 2.BeautifulSoup 分析网页 我们先来看看知乎上该网页的情况 网址:,容易看到,网址是有规律的,page慢慢递增,这样就能够实现全部爬取了. 再来看一下我们要爬取的内容: 我们要爬取两个内容:问题和回答,回答仅限于显示

python爬虫入门教程之点点美女图片爬虫代码分享_python

继续鼓捣爬虫,今天贴出一个代码,爬取点点网「美女」标签下的图片,原图. # -*- coding: utf-8 -*- #--------------------------------------- # 程序:点点美女图片爬虫 # 版本:0.2 # 作者:zippera # 日期:2013-07-26 # 语言:Python 2.7 # 说明:能设置下载的页数 #--------------------------------------- import urllib2 import urll

python爬虫入门教程之糗百图片爬虫代码分享_python

学习python少不了写爬虫,不仅能以点带面地学习.练习使用python,爬虫本身也是有用且有趣的,大量重复性的下载.统计工作完全可以写一个爬虫程序完成. 用python写爬虫需要python的基础知识.涉及网络的几个模块.正则表达式.文件操作等知识.昨天在网上学习了一下,写了一个爬虫自动下载「糗事百科」里面的图片.源代码如下: 复制代码 代码如下: # -*- coding: utf-8 -*- # 上面那句让代码里支持中文 #---------------------------------

js实现select跳转菜单新窗口效果代码分享(超简单)_javascript技巧

这是一款基于js实现select跳转菜单新窗口效果代码,分享给大家学习学习 运行效果图:----------------------查看效果----------------------- 小提示:浏览器中如果不能正常运行,可以尝试切换浏览模式. 为大家分享的js实现select跳转菜单新窗口效果代码如下 <select onchange="window.open(this.options[this.selectedIndex].value)" name="select&

php实现zip压缩文件解压缩代码分享(简单易懂)_php实例

仔细的研究了一下,原来用php写的解压程序效率比想象的还是高很多的,既然这么好,干脆再优化一下后用到自己后台中,虽然现在大部分空间的控制面板中有压缩和解压这个功能,但是毕竟有时候有些麻烦. 做这个之前,没有接触过php压缩这一块,网上搜了一些,大多数都是php压缩类.压缩函数,少则几百行,多的就几千行代码.这对于我这种新手来说很摸不到头脑,再说我也不用这么复杂的功能.最后参考函数手册,理清楚了几个相关的函数后,就明白了怎么去整了. 记得要开启 zip ,把 php.ini 中的 extensio

《用Python写网络爬虫》——第2章 数据抓取 2.1 分析网页

第2章 数据抓取 在上一章中,我们构建了一个爬虫,可以通过跟踪链接的方式下载我们所需的网页.虽然这个例子很有意思,却不够实用,因为爬虫在下载网页之后又将结果丢弃掉了.现在,我们需要让这个爬虫从每个网页中抽取一些数据,然后实现某些事情,这种做法也被称为抓取(scraping). 首先,我们会介绍一个叫做Firebug Lite的浏览器扩展,用于检查网页内容,如果你有一些网络开发背景的话,可能已经对该扩展十分熟悉了.然后,我们会介绍三种抽取网页数据的方法,分别是正则表达式.Beautiful Sou

python网络爬虫 - 设定重试次数内反复抓取

import urllib.request def download(url, num_retries=2): print('Downloading:', url) try: html = urllib.request.urlopen(url).read() except urllib.URLError as e: print('Download error:' % e.reason) html = None if num_retries > 0: if hasattr(e, 'code') a