使用html子字符串加速CsQuery选择器

时间:2013-03-16 02:54:09

标签: html html-parsing web-scraping html-parser csquery

我想解析一些复杂/沉重的HTML页面。我最近阅读了有关CsQuery的内容,并检查了CsQuery Vs Html Agility Pack and Fizzler的性能比较。根据这些测试,由于创建索引,CsQuery在创建DOM时会变慢。

假设我想选择一个重型html页面的某个元素(没有id),并且我知道它的祖先的ID,我将其用作上下文元素。如果我将这个沉重的html加载到DOM中,它会很慢,因此我的选择会很慢。但是,如果我可以快速预处理html并获取包含context元素(我知道哪个ID)的子字符串并将其加载到DOM中,那么它会更快。在这种情况下,我将摆脱大量不需要的HTML,不会创建索引器。因此,我的选择会更快。

我正在使用CsQuery,因为我想要类似JQuery的东西。

我的问题是:

给定HTML文档字符串:是否有快速方式(例如:线性)来获取HTML元素的HTML子字符串给定其ID?

1 个答案:

答案 0 :(得分:2)

首先让我说我认为你已经用CsQuery做出了正确的选择,我刚刚从HAP切换到它,我对这个开关感到高兴。 CsQuery的最新预发布版允许您完全关闭索引,或仅对代码进行部分索引。

来自问题跟踪器。

  

在当前的预发布代码中,您可以使用一种备用索引策略,它可以加快DOM构建速度,但代价是复杂的查询。 (实际上有两个新策略,如果你真的想要,你可以完全关闭索引:)对于你正在处理的场景,这可能会更好。

如果您愿意从其git-hub存储库下载代码并对其进行编译,那么使用预发行版就可以做到这一点。

DomIndexProviders类包含3个选项,RangedDomIndexProvider为很多选择器编制索引,并且非常聪明SimpleDomIndexProvider,它允许基本索引,NoDomIndexProvider不进行索引编制所有。 SimpleDomIndexProvider非常简单,可能适用于您的情况,您也可以考虑no indexing