node.js - 使用cheerio从亚马逊获取问题和答案
问题描述
我想从亚马逊获取产品的所有问答,我用它来获取对该产品的所有评论,但我不知道我需要填写的类名是什么,而不是.reviews
为了获取客户的问题和答案。
function parseHtml(html) {
const $ = cheerio.load(html);
// Load the reviews
const reviews = $('.review');
reviews.each((i, review) => {
// Find the text children
const textReview = $(review).find('.review-text').text();
console.log(textReview);
})
}
解决方案
问答不是页面初始 HTML 的一部分,因此 Cheerio 将无法看到它。当页面中的 Javascript 运行时,它在页面加载后通过 Javascript 延迟加载。
如果你想抓取它(而不是通过官方 API 获取它,如果存在的话),那么你将不得不使用比 Cheerio 更强大的东西。
例如,您可以使用 puppeteer,它使用 Chrome 引擎来实际运行网页。然后,您将拥有一个包含问题的完全填充的网页,您可以提取它们。
或者,您可以对网页中的 Javascript 如何加载数据进行逆向工程,并尝试直接发出该 API 请求。
请注意,该页面中也有几个 iframe,因此您必须确保在正确的 iframe 中进行 DOM 搜索。
推荐阅读
- angular - 当我需要模块时,为什么 Angular 会给我这个错误?
- android - 修复 Leak canary 发现的 Activity 内存泄漏
- c# - 在不知道文件扩展名的情况下设置 ImageURL c#
- r - 用于替换缺失值的循环
- gitlab - 如何在 GitLab YAML 文件中生成随机数
- python - 如何有条件地打印“如果没有输出值则没有值”
- python - python/kivy:需要函数clock()但由于递归而崩溃
- c# - C# 将属性复制到输出目录设置为始终从 Nuget 用于 PackageReference 项目
- python - 如何从熊猫系列中的字符串中删除最后5个字符
- c++ - CImg 库编译时返回未定义的引用 `__imp_SetDIBitsToDevice'