什么是 Cheerio?
无抓取抓取浏览器在云浏览器中渲染 JavaScript 页面,以便其生成的 HTML 可以使用诸如 Cheerio 之类的工具进行解析。
Cheerio 是一个用于解析 HTML 和 XML 的 JavaScript 库,能够使用类似 jQuery 的 API 查询生成的文档。它的主要任务是将标记转换为可搜索、遍历和修改的结构。在 Node.js 抓取器中,Cheerio 通常从已经获得的 HTML 中提取字段。
该库不提供可视化的浏览器环境。脚本元素仍然是文档的一部分,而不是 Cheerio 执行的程序。这使得输入的选择至关重要:所需的记录必须存在于您加载的标记中,无论该标记是来自普通的 HTTP 响应还是完整的浏览器工作流。
Cheerio 如何处理 HTML
Cheerio 将标记解析为节点,并公开方法用于选择和修改这些节点。 Cheerio 文档模型 提供熟悉的选择和遍历操作,而不需要浏览器渲染、布局或页面脚本执行。选择器描述您想要的节点,方法读取它们的文本或属性。
该模型适用于文章档案、服务器渲染的产品列表、公共文档和存储的 HTML 快照。您可以识别一个重复的容器,遍历其子元素,将每个容器转换为一个输出记录。解析器不需要显示页面就能执行这些操作。
Cheerio 还可以修改文档并序列化结果。这对于受控内容转换很有用,但提取和重写应在收集器中保持分开活动。如果您在检查缺失字段之前更改树,您可能会更难判断源是否遗漏了该值或您的转换是否将其删除。
加载字符串、字节或 URL
Cheerio 支持多种加载路径,正确的选择取决于标记的来源以及其编码是否已知。普通加载方法接受字符串。Node.js 还为字节、流和 URL 加载方法提供 Cheerio 所需的环境。
该 Cheerio 加载方法 包括用于字节的 loadBuffer、基于流的加载器和用于获取和解析 URL 的 fromURL。这意味着 Cheerio 不能获取页面的笼统说法是不准确的。它的 URL 加载器可以获取标记;但它仍然不是浏览器,也不执行页面的 JavaScript。
编码是保留原始字节的一个实际原因。一旦错误的文本解码器替换了字符,后续的解析器就无法可靠地重建原始标题。如果源编码不确定,请选择一个可以在创建用于提取的字符串之前检查字节和编码信息的输入路径。
还要区分完整文档和片段。卡片片段不一定意图与整个 HTML 页面有相同的周边结构。解析器生成的包装可能影响假设特定根的选择器。明确输入契约,以便从 API 中提取的片段不会意外地被视为完整文档。
选择器在记录容器内工作最佳
Cheerio 选择器在字段选择保持在每个重复项容器内时会生成更可靠的记录。从代表一个实体的卡片或行开始,然后找到其标题、链接和可选字段。这保留了值之间的关系,即使项目缺少字段。
该 Cheerio 选择器语法 包括标签、类、属性和关系选择器。后代选择器可以到达嵌套内容;直接子选择器限制关系。根据观察到的结构进行选择,而不是任意返回匹配的表达式。
考虑一个示例文章目录。一些卡片有副标题,其他则没有。将每个标题收集到一个数组,将每个副标题收集到另一个数组,可能会在第一个缺失副标题后改变配对。在每个卡片内选择这两个字段可以使缺失值保持与正确文章的关联。
优先选择在源中具有含义的属性和结构关系。长链位置选择器可能会重现当前布局,但当发布者插入另一张卡片时会失败。将选择器保留在一个小的、命名的提取层中,并在将记录传递给下游消费者之前检查必需字段。
文本、属性和链接的意义不同
文本内容、序列化标记和属性值是不同的提取输出。读取文本可以组合后代文本;读取属性返回存储的值;序列化 HTML 保留标记。选择与您的模式相匹配的表示形式,而不是对每个字段使用一种方法。
| 字段 | 首选表示 | 验证问题 |
|---|---|---|
| 文章标题 | 规范化文本 | 周围标签是否成为标题的一部分? |
| 详细地址 | 解析后的 URL | 哪个页面提供基本地址? |
| 稳定标识符 | 源属性或显式 ID | 在集合中是否唯一? |
| 丰富描述 | 受控标记或纯文本 | 输出消费者是否允许标记? |
相对链接必须针对正确的基础解析。如果请求重定向,最终文档地址可能与请求的地址不同。URL 解析遵循由 URL 标准描述的结构化规则;简单的字符串连接可能会为根相对路径、查询或父目录引用产生错误的位置。
一个实用的提取合同用于文章档案
一个文章档案提取器应该在处理整个目录之前定义接受的页面、记录边界和输出字段。想象一个公共档案,其条目包含一个标题和一个详细链接,以及一个可选的类别标签。这个场景展示了设计选择,而不是报告的实时数据集。
开始于一个被接受的HTML文档,并识别归档容器。在其中,识别每个条目并读取其标题和链接。使用文档的基础地址解析链接,并将缺失的类别保留下来作为缺失。归档外部的导航标题永远满足不了文章标题的要求。
源页面: https://example.com/source 文章地址: https://example.com/article ## 发现 在科学界,有许多重大发现改变了我们对世界的理解。翻译这些发现可以帮助更多人获取信息。 ### 重要发现 - 量子物理学的基础 - 相对论的应用 - 微生物对生态的影响 对于每一个发现,我们都应该深入研究和理解其背景,确保信息的准确性和完整性。 如需了解更详细的信息,请查阅[@@LINK_0@@](https://example.com/moreinfo)。
设置一个不可能组合的验证规则。一个有类别但没有标题的条目可能表示广告或选择器更改。拒绝或标记它,并给出原因,而不是从附近的文本中虚构一个标题。提取合同应在字段级别上使不确定性可见。
为了维护,保留一小组允许的HTML示例,以涵盖普通条目、缺失类别和意外嵌套。在更改选择器时比较字段关系。重要的检查是每个输出行是否仍然代表预期条目,而不仅仅是选择的节点总数是否保持不变。
为什么 Cheerio 有时不返回任何记录
Cheerio 在加载的树中没有找到与你的选择匹配的节点时将返回无记录。这可能意味着选择器是错误的、页面结构发生了变化,或者 HTML 中不包含记录。在决定适用哪种解释之前,请检查输入。
浏览器的元素面板显示脚本运行后的当前DOM。一个普通的HTTP响应可能仅包含应用程序的初始外壳。从渲染页面复制选择器并不能证明它可以匹配响应主体。在该主体中搜索一个已知的标题或标识符,以确定该信息是否完全存在。
呈现也有完成条件。如果在用户操作后出现记录,则在操作之前拍摄的快照将是不完整的,即使它来自浏览器。定义重要状态,例如归档列表的出现或所选类别的更新,然后再将 HTML 交给 Cheerio。
使用 Cheerio 结合无痕浏览器进行抓取
Scrapeless Scraping Browser 在页面需要 JavaScript 或交互才能提取内容时提供浏览器执行。该应用可以通过浏览器工作流获取相关的渲染文档,然后使用 Cheerio 对该快照进行确定性解析。
规则: 1. 仅输出翻译后的文本——不做解释,不加额外的包裹代码块。 2. 精确保留Markdown/HTML结构(标题、列表、链接、表格)。 3. 保持任意占位符令牌如@@CODEBLOCK_0@@或@@INLINECODE_0@@完好无损;绝不要翻译、重新排序、合并或重新格式化它们。 4. 不要添加或删除```代码块,也不要将普通文本包装成代码块。 无抓取云浏览器 地址获取,同时 刮取浏览器简介 解释浏览器服务。您的架构仍然需要必需字段、URL 处理和明确的记录边界。托管渲染无法决定哪个附近的价格或标签属于您的记录。
相关 Cheerio提取指南 扩展HTML解析工作流。评估 无抓取定价 围绕实际上需要浏览器执行的页面。当静态文档的初始标记已经包含完整数据时,可以保持在一个更简单的获取路径上。
结论
Cheerio 是一个专注于将可用的 HTML 转换为结构化 JavaScript 记录的选择。提供正确的文档,选择每个实体内的字段,并保留缺失值和源地址。当内容依赖于浏览器行为时,首先修复获取,然后保持提取合同的稳定。
获取您的解析器所需的 HTML
使用无痕刮取浏览器处理需要浏览器执行的页面,然后让Cheerio负责你的提取规则。
今天注册并获得 $5 的免费信用额度 — 无需信用卡.
领取您的 $5 信用 →常见问题解答
Q: Cheerio和jQuery是一样的吗?
Cheerio 提供了类似 jQuery 的选择和操作 API,但它并不像浏览器中的 jQuery 那样在实时页面 DOM 中运行。您需要显式加载 Cheerio 将要解析的文档。熟悉的方法名称并不意味着布局、事件处理或 JavaScript 执行。
Q: Cheerio能下载页面吗?
Cheerio在其Node.js环境中提供了一个fromURL加载器,用于获取和解析标记。其他加载方法接受字符串、字节或流。URL加载仍然是一项HTTP获取操作,不会呈现客户端应用程序内容。
问:为什么我提取的链接是相对的?
一个 HTML 链接属性可以包含相对引用,而不是绝对 URL。将其解析为文档的正确基本地址,并在相关时保留重定向后的最终地址。避免通过连接字符串来构建链接而无需考虑 URL 的解析。
Q: Cheerio 能解析 JavaScript 网站吗?
Cheerio 可以解析来自任何来源的标记,包括 JavaScript 应用程序,只要所需的内容存在于该标记中。它不会执行应用程序来创建缺失的节点。当初始响应缺少数据时,首先获取相关的渲染状态。