javascript - 使用 NodeJS、Nightmare 和 Cheerio 抓取 JS 站点
问题描述
我正在尝试抓取一个网站以获取每个团队的分数。我遇到了我的脚本返回空内容的问题。我看不出哪里出错并寻求帮助。
JS:
const Nightmare = require('nightmare')
const cheerio = require('cheerio');
const fs = require('fs');
const nightmare = Nightmare({ show: true })
const url = 'https://www.mscl.org/live/scorecard/ed7941919f69b0e11e800fef/mHcehsPR9S86T3zQv';
nightmare
.goto(url)
.wait('body')
.wait('div#summaryTab.tab-pane.fade.in.table-responsive.borderless.active')
.evaluate(() => document.querySelector('div.col-md-6').innerHTML)
.end()
.then(response => {
console.log(getData(response));
}).catch(err => {
console.log(err);
});
let getData = html => {
data = [];
const $ = cheerio.load(html);
$('div').each((i, elem) => {
if(i === 0 ){
console.log($(elem).find('nth-child(1)').html());
}
});
return data;
}
我正在抓取的 html 在这里。 https://pastebin.com/R6syWDwD
分数所在的行:30 和 32
<div class="col-md-6">
<b>40 Overs Match</b><br>
<b>MVCC Combined</b> won the toss and chose Batting<br>
<b>Umpires: </b>No umpires were selected<br>
<b>Date: </b> 3/24/2021, 5:00:00 PM<br>
<b>Ground: </b>Acton Field 1<br>
<b>Result: TBD</b><br>
<b>MoM: </b> <br>
<hr>
<p><b>MVCC COMBINED XI - 147/10</b> (<b>O:</b> 12.5 | <b>RR:</b> 11.45)</p>
<p><b>MVCC United XI - 23/1</b> (<b>O:</b> 2.0 | <b>RR:</b> 11.50)</p>
<hr>
</div>
当我运行它时,它什么也不返回。也没有显示错误。我错过了什么?
解决方案
nth-child的jQuery 文档说
jQuery 对 :nth- 选择器的实现严格地源自 CSS 规范
因此,您可能必须为您的nth-child(1)
-pseudo-selector 提供一个元素,以告诉 jQuery 它应该从哪个元素中选择第 n 个子元素。尝试这个:
console.log($(elem).find('b:nth-child(1)').html());
或者,只需尝试nth-child(1)
使用冒号作为前缀 ->:nth-child(1)
编辑:
我刚刚意识到您在您选择的 div 上使用了 innerHTML,它实际上返回了 div 的内容,而没有包装 div 本身。但是在getData
您尝试选择$('div')
实际找不到的 div 。
推荐阅读
- php - 为什么 Laravel 在加载数据时有时会使用单数数据库表名?
- python - 当一个\ x中有一个以上字节时如何解释python字节类
- c - 如何使用原始套接字设置 TCP 选项(MSS、Window Scale 和 SACK)
- c++ - 如何定义迭代器的值类型,它指向C++中另一个容器中的元素
- ios - 改变 AVPlayer 方向 - Swift
- google-apps-script - 无法访问的服务 - appsactivity
- glfw - Vulkan、glfw 和 macOS:vkCreateInstance 返回 VK_ERROR_INITIALIZATION_FAILED
- selenium-firefoxdriver - 如何让 FirefoxDriver 自动播放 youtube 视频?
- bash - bash 单个命令,更新命令输出
- google-sheets - Array_Constrain 或 Query 减慢工作表