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

标签 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 并获取包含上下文元素(我知道其 ID)的子字符串并将其加载到 DOM 中,那么速度会更快。在这种情况下,我会删除大量不需要的 HTML,不会为其创建索引器。因此,我的选择会更快。

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

我的问题是:

给定一个 HTML 文档字符串:是否有一种快速方法(例如:线性)来获取给定 id 的 HTML 元素的 HTML 子字符串?

最佳答案

首先让我说,我认为您对 CsQuery 做出了正确的选择,我不久前从 HAP 切换到了它,我对这一切换感到非常高兴。 最新预发布的 CsQuery 允许您完全关闭索引,或仅对代码进行部分索引。

来自问题跟踪器。

In the current prerelease code there's an alternate indexing strategy you can use which speeds up DOM construction quite a bit, at the expense of complex queries. (Actually there's two new strategies, you can turn the index off altogether if you really want to :) This may be better for the kind of scenarios you're dealing with.

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

DomIndexProviders类包含 3 个选项,RangedDomIndexProvider 为很多选择器建立索引,并且非常聪明 SimpleDomIndexProvider 允许基本索引,NoDomIndexProvider 不进行索引全部。 SimpleDomIndexProvider非常简单,可能适合您的情况,您也可以考虑 no indexing .

关于html - 使用 html 子字符串加速 CsQuery 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15445049/

相关文章:

Python/BS - 从存储在目录中的 html 文件获取 URL,保存到 CSV

react-native - 在 React Native 中自动登录、导航和解析网页

python - 创建循环以在 scrapy/python 中解析表数据

python - 请求响应的 Xpath 返回空列表

javascript - 在这个 html5 canvas 实现中这些正弦计算有什么问题

javascript - 使用 css、bootstrap、html 的垂直抽屉导航

javascript - 如何将javascript变量传递给服务器端asp.net

python - 如何删除 BeautifulSoup 中的空格

python - Selenium 加载,但不打印所有 HTML

javascript - 无法从显示为 : flex 的父 div 获取 "left"值