node.js - Cheerio webcrawler 获取序列元素
问题描述
我正在开发一个网络爬虫来读取这样的 html 代码:
<h3>title 1</h3>
<p>content 1</p>
<h3>title 2</h3>
<p>content 2</p>
<h3>title 3</h3>
<p>content 3</p>
<h3>title 4</h3>
<p>content 4</p>
<h3>title 5</h3>
<p>content 5</p>
我想将标题 1 与内容 1 匹配,将标题 2 与内容 2 匹配,然后继续。我没有在cheerio 文档或jquery 中找到获取下一个元素或循环所有DOM 的方法。
在文档中,我只能进入一个元素(孩子)并回来(父母)。但我找不到下一个'
' 在找到它上面的 '' 之后。
有什么想法吗?
谢谢!
解决方案
这里有几种方法:
const cheerio = require('cheerio')
const $ = cheerio.load('<h3>title 1</h3><p>content 1</p><h3>title 2</h3><p>content 2</p><h3>title 3</h3><p>content 3</p><h3>title 4</h3><p>content 4</p><h3>title 5</h3><p>content 5</p>')
$('h3').get().map( h3 => {
let title = $(h3).text()
let content = $(h3).next().text()
// or
content = $(h3.nextSibling).text()
console.log(title, content)
} )
jQuery 让你做$(h3).find('+ p')
这会很好,但cheerio 不支持它。
推荐阅读
- jquery - 将变量传递给 Formvalidation.io ajax 成功
- reactjs - 在某些页面中缺少道具并且无法在 react js 中使用 history.push
- python - 如何删除 setup.cfg 中不需要的顶级包?
- c# - 将给定的属性访问转换为链式字符串
- amazon-web-services - 是否可以在 ECS 容器上安装 Apache 超集
- sql - Oracle SQL Developer 查询推荐的密码设置
- c# - 找不到运行时DLL(coreclr.dll),0x80004005
- ios - 对象不使用弱引用解除分配
- reactjs - React Next.js - 关于 SSR 模式的三个相关问题
- python - Python/Numpy:在二维数组中按行组合布尔掩码