如何仅从网站上刮掉 标记

2024-03-07

我正在研究网络爬虫。目前我抓取了整个内容,然后使用正则表达式删除<meta>, <script>, <style>和其他标签并获取正文的内容。

但是,我正在尝试优化性能,我想知道是否有一种方法可以只抓取<body>页面的?

namespace WebScraper
{
    public static class KrioScraper
    {    
        public static string scrapeIt(string siteToScrape)
        {
            string HTML = getHTML(siteToScrape);
            string text = stripCode(HTML);
            return text;
        }

        public static string getHTML(string siteToScrape)
        {
            string response = "";
            HttpWebResponse objResponse;
            HttpWebRequest objRequest = 
                (HttpWebRequest) WebRequest.Create(siteToScrape);
            objRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; " +
                "Windows NT 5.1; .NET CLR 1.0.3705)";
            objResponse = (HttpWebResponse) objRequest.GetResponse();
            using (StreamReader sr =
                new StreamReader(objResponse.GetResponseStream()))
            {
                response = sr.ReadToEnd();
                sr.Close();
            }
            return response;
        }

        public static string stripCode(string the_html)
        {
            // Remove google analytics code and other JS
            the_html = Regex.Replace(the_html, "<script.*?</script>", "", 
                RegexOptions.Singleline | RegexOptions.IgnoreCase);
            // Remove inline stylesheets
            the_html = Regex.Replace(the_html, "<style.*?</style>", "", 
                RegexOptions.Singleline | RegexOptions.IgnoreCase);
            // Remove HTML tags
            the_html = Regex.Replace(the_html, "</?[a-z][a-z0-9]*[^<>]*>", "");
            // Remove HTML comments
            the_html = Regex.Replace(the_html, "<!--(.|\\s)*?-->", "");
            // Remove Doctype
            the_html = Regex.Replace(the_html, "<!(.|\\s)*?>", "");
            // Remove excessive whitespace
            the_html = Regex.Replace(the_html, "[\t\r\n]", " ");

            return the_html;
        }
    }
}

From Page_Load我打电话给scrapeIt()方法将我从页面文本框中获取的字符串传递给它。


仍然是最简单/最快(最不准确)的方法。

int start = response.IndexOf("<body", StringComparison.CurrentCultureIgnoreCase);
int end = response.LastIndexOf("</body>", StringComparison.CurrentCultureIgnoreCase);
return response.Substring(start, end-start + "</body>".Length);

显然,如果 HEAD 标签中有 javascript,比如......

document.write("<body>");

然后你最终会得到比你想要的多一点的东西。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何仅从网站上刮掉 标记 的相关文章

  • 将 dataGridView 中选定的行作为对象检索

    我有一堂这样的课 public partial class AdressBokPerson public long Session get set public string F rnamn get set public string Ef
  • 无法加载程序集问题

    我收到以下错误 无法加载程序集 错误详细信息 System BadImageFormatException 无法加载文件或程序集 文件 或其依赖项之一 该程序集是由比当前加载的运行时更新的运行时构建的 无法加载 该程序集是使用 Net Fr
  • Linq 合并列表

    我的课 public class Foo public int A get set public List
  • 控制台应用程序中使用 Unicode 字符的 _tprintf

    我正在从 Unicode 构建的控制台应用程序 使用 C 和 Visual Studio 2008 执行这个简单的输出 此代码旨在在 Windows 上运行 tprintf L Some sample string n 一切正常 但是如果我
  • Type.MakeByRefType 的反义词是什么

    The Type MakeByRefType http msdn microsoft com en us library system type makebyreftype aspx NET 中的方法返回类型的 by ref 版本 例如传递
  • 处理“未找到细胞”。 Excel 中的错误

    我正在使用 Excel VSTO 应用程序并使用以下代码在工作表中查找错误单元格 Excel Range rngTemp Excel Range rngErrorRange Excel Worksheet Sheet1 Excel Work
  • 如何让XmlReader读取C#中的属性?

    我有一个 XML Stream 其中包含以下 XML 内容
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • 更改 Xamarin.Forms 应用中顶部栏和底部栏(ControlsBar、StatusBar)的颜色

    无论如何 即使后面需要特定于平台的代码 也可以更改顶部栏 蓝色的 和底部栏 黑色的 的颜色吗 我希望添加对浅色和深色模式的支持 因此我希望能够在运行时更改它 有可能的 Android Using Window SetStatusBarCol
  • 当需要不同数量和类型的参数时如何创建操作委托列表

    我们有一组大约两打的类 它们继承自具有抽象 Validate 方法的基类 当然 每个类都有不同的验证需求 但它们之间的不同组合需要规则 因此 正如您可以想象的那样 这导致了大量代码重复 例如 A 类需要规则 1 3 6 和 9B 类需要规则
  • C#:自定义转换为值类型

    是否可以将自定义类转换为值类型 这是一个例子 var x new Foo var y int x Does not compile 是否有可能实现上述情况 我需要超载一些东西吗Foo 您将必须重载强制转换运算符 public class F
  • DataGridView 行背景颜色没有改变

    我想根据加载时的特定条件更改 DGV 行的背景颜色 即使在 Windows 窗体中也是如此 但我看不到任何 DGV 行的颜色有任何变化 谁能告诉我如何解决这个问题 private void frmSecondaryPumps Load ob
  • 从 DataRow 单元格解析 int [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 如何从 DataRow 单元格解析 int 值 Int32 Parse item QuestionId ToString 这段代码可以工作 但看
  • .NET WebClient:DownloadString 在哪里?

    我可能在这里遗漏了一些东西 但是当我使用 WebClient 并查找 DownloadString 方法 如书籍示例中所示 时 我只看到 DownloadStringAsync 我缺少什么导入 您使用的是 Silverlight 吗 Sil
  • Xcode 7 调试器不会中断内联标头函数

    过去五年我一直在各种 C 项目中使用 Xcode 没有出现这个问题 今天 我打开了一个较旧的项目 大约 2 年前 并尝试通过在该函数中放置一个活动断点来调试头文件中的内联函数 由于某种原因 调试器不会中断此代码 但是 如果我在调用该函数的
  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死
  • 具有四个 && 的 LINQ Where 子句

    我正在尝试在Where 子句中创建一个带有4 个参数的LINQ 查询 这是一个 Windows 8 应用程序项目 我正在使用 SQLite 数据库 SQLite 实现 https github com praeclarum sqlite n
  • 从对列表创建邻接列表类型结构

    在 C 中 我有 class Pair int val1 int val2 我有一个来自以下来源的配对列表 List
  • 从脚本启用/禁用 GameObject 组件 [Unity3D]

    我需要获取一个脚本中设置的布尔值 放入名为 bouclier 的变量 以启用或禁用游戏对象 该变量位于游戏对象 Player 中 此处右下角 我需要启用或禁用这个游戏对象 Bouclier01 为此 我将脚本附加到游戏对象 Bouclier
  • 如何在c#中创建多线程

    我需要监听机器中的所有串行端口 假设我的机器有 4 个串行端口 我必须创建 4 个线程并开始分别使用附加线程监听每个端口 我使用此代码来获取我的机器中的端口数量 private SerialPort comPort new SerialPo

随机推荐

  • Python 将 3d 数组重塑为 2d

    我想将 numpy 数组重塑为所描绘的形状 从 3D 变为 2D 不幸的是 顺序不正确 假设有一个 numpy 数组 1024 64 100 并希望将其转换为 1024 100 64 有人知道如何维持秩序吗 我有一个样本数据 data 0
  • Maven - 对等点未经过身份验证

    几天前 我的专家停止工作了 更具体地说 它会停止下载依赖项 下面我记录了我为找到解决方案而执行的一系列信息和步骤 我仔细检查了 settings xml 这个文件也被我的同事使用 他们没有任何问题 我安装了 Maven 3 0 4 3 0
  • 存储批处理作业的密码

    我有一个小的java prog 它使用需要授权的网络服务 因此java prog 将使用Windows任务调度程序运行 需要有一个用户 密码参数 如何将它们存储在某个地方而不将它们作为纯文本放在文件中 到目前为止 我已经尝试使用runtim
  • 无法在将新附加的字符串列保存到 numpy 数组时执行 np.savetxt

    我有 numpy 数组mfcc具有 mfcc 值 且形状为 5911 20 我有一份清单a 其中有 5911 个标签 例如apple cow dog 我想将这些标签附加到mfccnumpy 数组 STEP1我将带有标签的列表转换为数组 at
  • 自定义 Django 字段来存储电子邮件地址列表

    我正在尝试向 Django 模型添加一个字段来表示电子邮件地址列表 我希望用户在管理中的表单中输入逗号分隔的地址列表 然后我的应用程序将解析该列表以发送一系列电子邮件 我当前的实现涵盖了基本思想 但有很大的局限性 在管理中 如果我输入类似的
  • 增加 JMeter 执行期间的线程数

    我有一个性能测试JMeter并想用它来测试最大系统性能 吞吐量 因此 当错误率低于 2 时 应增加活动线程数 我发现Constant Throughput Timer 把它放入Thread Group但它只会暂停或减慢线程 我尝试将其定义如
  • 从 Postman 向 Microsoft Bot 发送消息

    我正在尝试向我创建并发布到 azure 服务的机器人发送消息 以便该机器人可以开始向其某些用户发送消息 我尝试首先在 Postman 上发出请求 然后我可以为该交互构建一个控制器 我正在执行以下请求 POST https login mic
  • 单击手风琴中元素 id 的链接时打开 JQuery 手风琴

    这是我的问题http jsfiddle net uJ3W5 12 http jsfiddle net uJ3W5 12 正如您所看到的 顶部的 4 个按钮链接到手风琴第 1 部分中的元素 然而 当手风琴关闭时 这些链接不起作用 我需要它 这
  • 如何比较yaml文件中的键?

    有两个 Ruby on Rails 国际化 yaml 文件 一份文件完整 另一份文件缺少密钥 如何比较两个 yaml 文件并查看第二个文件中缺少的键 有没有工具可以做到这一点 假设file1是正确的版本并且file2是缺少密钥的版本 def
  • 将 VS2019 与 TFS2018 vnext 构建系统结合使用,无需服务器端解决方法

    我最近在尝试将 VS2019 与 TFS2018 vnext 构建系统一起使用时遇到了问题 在 Visual Studio Build 步骤中不能选择VS2019 选择 Latest 则不会使用Visual Studio 2019 在测试服
  • 是否可以对 feed 进行过滤

    是否可以对流中的提要实施过滤 我希望允许用户关注其他用户帖子 但将这些帖子标记为各种类别 我们的愿望是选择一个 足球 类别 并仅查看我关注的人发布的具有该标签的帖子 或者如果该类别是 所有体育 则可能是一个标签集合 查看 api 和文档 提
  • Spring集成:如何顺序处理文件

    我使用 int file inbound channel adapter 来加载目录中存在的文件 我喜欢按顺序处理文件 这意味着当第一个文件的处理完成时 我加载第二个文件 等等 I see a sample https github com
  • Firefox 中的无效日期 - Javascript

    我想将以下字符串 10 10 2013 03 04 放入 Date 对象中 它在 Chrome 中工作 但 Firefox 告诉我这是一个无效的日期 我猜他们的意思是格式 我尝试对其使用 Date parse 但这使其成为 NaN 该怎么办
  • 如何向表达式添加另一个条件?

    我有这样的表情 Expression
  • Mongoose - 如何分组和填充?

    我使用 MongoDB 和 Mongoose 作为我的 ODM 我尝试使用以下命令进行查询populate and group by在同一份声明中 这是我的简单文档模型 var userSchema new Schema username
  • 避免在 WooCommerce 购物车中组合虚拟和物理产品

    我已经寻找这个问题很长时间了 但似乎从未找到可能的解决方案 有谁看到任何解决方案如何在一个 Woocommerce 购物车中仅允许物理或虚拟产品 当客户尝试添加虚拟和物理的组合并禁止该组合时 或者确保该组合不能出现在一个购物车中时 可能会弹
  • 当网络连接关闭时,适用于 Android 的 Picasso 库是否可以处理图像加载?

    我正在开发一个我使用的应用程序毕加索图书馆 http square github io picasso 用于在我的中加载图像ViewPager和别的ImageViews 所以我想知道如果网络连接关闭会发生什么 库是否可以自行处理 或者我是否
  • 通过 C++ 互操作或其他方式实现 C# 第一类延续?

    我们有一个非常高性能的多任务 近乎实时的 C 应用程序 这一性能主要是通过使用自制的调度程序在内部实施协作多任务来实现的 这通常称为微线程 在这个系统中 所有任务都通过队列与其他任务通信 我们遇到的具体问题似乎只能通过 C 不支持的第一类延
  • 按部分函数与 lambda 映射列表

    我想知道对于大多数例子来说 它是否更 Pythonic 使用lambda http docs python org reference expressions html lambda or the partial http docs pyt
  • 如何仅从网站上刮掉 标记

    我正在研究网络爬虫 目前我抓取了整个内容 然后使用正则表达式删除