原文 c# 正则表达式对网页进行内容抓取

  1. 搜索引擎中一个比较重要的环节就是从网页中抽取出有效内容。简单来说,就是吧HTML文本中的HTML标记去掉,留下我们用IE等浏览器打开HTML文档看到的部分(我们这里不考虑图片).
  2.  
  3. HTML文本中的标记分为:注释,script ,style,以及其他标记分别去掉:
  4.  
  5. 1.去注释,正则为:
  6.  
  7. output = Regex.Replace(input, @"<!--[^-]*-->", string.Empty, RegexOptions.IgnoreCase);
  8.  
  9. 2.script,正则为:
  10.  
  11. ouput = Regex.Replace(input, @"<script[^>]*?>.*?</script>", string.Empty, RegexOptions.IgnoreCase | RegexOptions.Singleline);
  12.  
  13. output2 = Regex.Replace(ouput , @"<noscript[^>]*?>.*?</noscript>", string.Empty, RegexOptions.IgnoreCase | RegexOptions.Singleline);
  14.  
  15. 3.style,正则为:
  16.  
  17. output = Regex.Replace(input, @"<style[^>]*?>.*?</style>", string.Empty, RegexOptions.IgnoreCase | RegexOptions.Singleline);
  18.  
  19. 4.去其他HTML标记
  20.  
  21. result = result.Replace(" ", " ");
  22.  
  23. result = result.Replace(""", "\"");
  24.  
  25. result = result.Replace("<", "<");
  26.  
  27. result = result.Replace(">", ">");
  28.  
  29. result = result.Replace("&", "&");
  30.  
  31. result = result.Replace("<br>", "\r\n");
  32.  
  33. result = Regex.Replace(result, @"<[\s\S]*?>", string.Empty, RegexOptions.IgnoreCase);
  34.  
  35. 以上的代码中大家可以看到,我使用了RegexOptions.Singleline参数,这个参数很重要,他主要是为了让"."(小圆点)可以匹配换行符.如果没有这个参数,大多数情况下,用上面列正则表达式来消除网页HTML标记是无效的.
  36.  
  37. HTML发展至今,语法已经相当复杂,上面只列出了几种最主要的标记,更多的去HTML标记的正则我将在
  38.  
  39. Rost WebSpider 的开发过程中补充进来。
  40.  
  41. 下面用c#实现了一个从HTML字符串中提取有效内容的类:
  42.  
  43. using System;
  44.  
  45. using System.Collections.Generic;
  46.  
  47. using System.Text;
  48.  
  49. using System.Text.RegularExpressions;
  50.  
  51. class HtmlExtract
  52.  
  53. {
  54.  
  55. #region private attributes
  56.  
  57. private string _strHtml;
  58.  
  59. #endregion
  60.  
  61. #region public mehtods
  62.  
  63. public HtmlExtract(string inStrHtml)
  64.  
  65. {
  66.  
  67. _strHtml = inStrHtml
  68.  
  69. }
  70.  
  71. public override string ExtractText()
  72.  
  73. {
  74.  
  75. string result = _strHtml;
  76.  
  77. result = RemoveComment(result);
  78.  
  79. result = RemoveScript(result);
  80.  
  81. result = RemoveStyle(result);
  82.  
  83. result = RemoveTags(result);
  84.  
  85. return result.Trim();
  86.  
  87. }
  88.  
  89. #endregion
  90.  
  91. #region private methods
  92.  
  93. private string RemoveComment(string input)
  94.  
  95. {
  96.  
  97. string result = input;
  98.  
  99. //remove comment
  100.  
  101. result = Regex.Replace(result, @"<!--[^-]*-->", string.Empty, RegexOptions.IgnoreCase);
  102.  
  103. return result;
  104.  
  105. }
  106.  
  107. private string RemoveStyle(string input)
  108.  
  109. {
  110.  
  111. string result = input;
  112.  
  113. //remove all styles
  114.  
  115. result = Regex.Replace(result, @"<style[^>]*?>.*?</style>", string.Empty, RegexOptions.IgnoreCase | RegexOptions.Singleline);
  116.  
  117. return result;
  118.  
  119. }
  120.  
  121. private string RemoveScript(string input)
  122.  
  123. {
  124.  
  125. string result = input;
  126.  
  127. result = Regex.Replace(result, @"<script[^>]*?>.*?</script>", string.Empty, RegexOptions.IgnoreCase | RegexOptions.Singleline);
  128.  
  129. result = Regex.Replace(result, @"<noscript[^>]*?>.*?</noscript>", string.Empty, RegexOptions.IgnoreCase | RegexOptions.Singleline);
  130.  
  131. return result;
  132.  
  133. }
  134.  
  135. private string RemoveTags(string input)
  136.  
  137. {
  138.  
  139. string result = input;
  140.  
  141. result = result.Replace(" ", " ");
  142.  
  143. result = result.Replace(""", "\"");
  144.  
  145. result = result.Replace("<", "<");
  146.  
  147. result = result.Replace(">", ">");
  148.  
  149. result = result.Replace("&", "&");
  150.  
  151. result = result.Replace("<br>", "\r\n");
  152.  
  153. result = Regex.Replace(result, @"<[\s\S]*?>", string.Empty, RegexOptions.IgnoreCase);
  154.  
  155. return result;
  156.  
  157. }
  158.  
  159. #endregion

c# 正则表达式对网页进行内容抓取的更多相关文章

  1. WordPress快速增加百度收录,加快网站内容抓取

    本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 利用百度站长平台提供的链接 ...

  2. Python 网页投票信息抓取

    最近学习python,为了巩固一下学过的知识,花了半天(主要还是因为自己正则表达式不熟)写了个小脚本来抓取一个网站上的投票信息,排名后进行输出. 抓取的网站网址是http://www.mudidi.n ...

  3. 有了 Docker,用 JavaScript 框架开发的 Web 站点也能很好地支持网络爬虫的内容抓取

    点这里 阅读目录 用 AngularJS(以及其它 JavaScript 框架)开发的 Web 站点不支持爬虫的抓取 解决方案 为什么公开我们的解决方案 实现 AngularJS 服务 结论   Pr ...

  4. 爬虫小例1:ajax形式的网页数据的抓取

    ---恢复内容开始--- 下面记录如何抓取ajax形式加载的网页数据: 目标:获取“https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%8 ...

  5. 网页爬虫--python3.6+selenium+BeautifulSoup实现动态网页的数据抓取,适用于对抓取频率不高的情况

    说在前面: 本文主要介绍如何抓取 页面加载后需要通过JS加载的数据和图片 本文是通过python中的selenium(pyhton包) + chrome(谷歌浏览器) + chromedrive(谷歌 ...

  6. 关于抓取js加载出来的内容抓取

    一.抓取页面 url=https://www.xuexi.cn/f997e76a890b0e5a053c57b19f468436/018d244441062d8916dd472a4c6a0a0b.ht ...

  7. 手机连接fiddler后,浏览器无法打开网页或者fiddler抓取不到手机应用相关数据的情况

    关于手机如何连接fiddler,网上有很多教程,我暂时就不写了 今天在使用fiddler的过程中,发现fiddler突然无法抓取移动端应用的数据包,再三确认连接无误.因此就开始了解决之旅 起因是安卓手 ...

  8. 一起来学习XPATH,来看看除了正则表达式我们还能怎么抓取数据

    参考学习的网站链接http://www.w3school.com.cn/xpath/xpath_intro.asp 首先理清楚一些常识 以此为例 <?xml version="1.0& ...

  9. Python爬虫之三种网页抓取方法性能比较

    下面我们将介绍三种抓取网页数据的方法,首先是正则表达式,然后是流行的 BeautifulSoup 模块,最后是强大的 lxml 模块. 1. 正则表达式   如果你对正则表达式还不熟悉,或是需要一些提 ...

随机推荐

  1. Linux vps无法发送邮件

    首先安装sendmail软件...yum install sendmail /etc/init.d/php-fpm restart 来检查下sendmail是否正常运行 /etc/init.d/sen ...

  2. Tea加密算法和XxTea加密算法

    TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,支持128位密码,与BlowFish一样TEA每次只能加密/解密8字节数据.TEA特点是速度快.效率高,实现也 ...

  3. Linux实现SSH无密码登录(对目录权限的设置非常详细,可以参考一下)

    假设服务器IP地址为192.168.1.1,机器名:cluster.hpc.org 客户端IP地址为172.16.16.1,机器名:p470-2.wangrx.sioc.ac.cn 客户端用户yzha ...

  4. http://bassistance.de/jquery-plugins/

    http://bassistance.de/jquery-plugins/ Query插件:手风琴 jQuery插件:自动完成 jQuery插件:留言 jQuery插件:密码验证 jQuery插件:P ...

  5. UESTC_Big Brother 2015 UESTC Training for Graph Theory<Problem G>

    G - Big Brother Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) ...

  6. xen vhd操作工具source code研读

    推出最新的VHD操作工具VHD-UTIL 实现源码,超强,Ruiy只为学习高手的设计思路

  7. Unity 读取Excel

    游戏有大多数配置文件,比如玩家等级,游戏商店信息等等.通常情况下把这些放入excel中来读取 第一种解决方案: xlsx –> csv –> 改变成UTF-8 或者Unicode编码 –& ...

  8. HibernateTemplate和HibernateDaoSupport

    Spring整合Hibernate后,为Hibernate的DAO提供了两个工具类:HibernateTemplate和HibernateDaoSupport HibernateTemplateHib ...

  9. 单调队列-hdu-3415-Max Sum of Max-K-sub-sequence

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3415 题目大意: 给n个数凑成环状,求某一区间,使得该区间长度不超过k,且总和最大. 解题思路: 区 ...

  10. Struts2使用Interceptor实现权限控制的应用实例详解

    Struts2使用Interceptor实现权限控制的应用实例详解 拦截器:是Struts2框架的核心,重点之重.因此,对于我们要向彻底学好Struts2.0.读源码和使用拦截器是必不可少的.少说了. ...