javascript - CheerioJS 返回空结果,即使该元素存在但它在 Python 中工作

标签 javascript python node.js request cheerio

我正在尝试对价格和运输重量进行一些网络抓取,以便计算我的商品的运费,在这种情况下我使用的是亚马逊。我尝试使用 NodeJS 并创建一个 API,以便我可以将它与前端连接起来以便于使用,但不知何故,它不会返回该元素,即使该元素显然存在,并且它可以在 Python 中正常工作见下文...

这是我的 NodeJS 代码,为了这个问题,我将 AMD Ryzen 的链接作为 URL:

const cheerio = require('cheerio');
const request = require('request');

const url = `https://www.amazon.com/AMD-Ryzen-Processor-Wraith-Cooler/dp/B07B428M7F/ref/=sr_1_2/?ie\=UTF8\&qid\=1540883858\&sr\=8-2\&keywords\=amd`;

request(url, (error, response, body) => {
  if(error) console.log(error);
  let $ = cheerio.load(body);
  console.log($('#priceblock_ourprice').text()); // Returns an empty line, even though it works in Python.
});

这是我的 Python 代码:

import requests, urllib, sys
from pyquery import PyQuery as pq

d = pq(url="https://www.amazon.com/AMD-Ryzen-Processor-Wraith-Cooler/dp/B07B428M7F/ref/=sr_1_2/?ie\=UTF8\&qid\=1540883858\&sr\=8-2\&keywords\=amd")

print(d('#priceblock_ourprice').text()) # Returns $309.89 as expected.

它使用相同的 URL,但仍按预期返回元素,我什至尝试为 NodeJS 使用不同的请求模块,结果仍然相同,问题可能出在 Cheerio 上吗?欢迎任何意见。

最佳答案

所以我终于解决了这个问题,老实说,我不知道为什么具有该 id 的跨度显示在 Python 版本中而不是 NodeJS 版本中,我调试它的方法是将整个响应转储到一个文件中,然后然后搜索并查看具有该特定 ID 的跨度是否存在,结果证明它不存在......幸运的是我找到了一个带有附加 data 属性的 div,其中一个数据属性是价格,所以我将 DOM 选择器更改为:

$('#cerberus-data-metrics').data('asin-price')

现在可以使用了。

关于javascript - CheerioJS 返回空结果,即使该元素存在但它在 Python 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53068297/

相关文章:

javascript - React - 复制粘贴导航栏示例的问题

javascript - 如何在 Google map 中的方向变化之间实现平滑过渡?

python - 通过 imp.load_source 加载具有相同名称的模块导致模块合并

python - 无效参数错误 : input_1:0 is both fed and fetched

node.js - knex like 查询动态添加

javascript - 从js文件调用函数到html页面

javascript - 阻止 AngularJS 不执行 HTML 标签

python - 如何在多页面应用程序上使用plotly-dash下载文件?

node.js - node-gyp 在安装过程中失败 web3 scrypt@6.0.3 install : `node-gyp rebuild`

javascript - 在javascript中访问对象成员