首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CheerioJS返回空结果,即使元素存在,但它在Python中工作

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

Stack Overflow用户
提问于 2018-10-30 23:57:43
回答 1查看 509关注 0票数 1

我正在尝试做一些价格和运输重量的网络抓取,以便我可以计算我的项目的运输成本,在这种情况下,我使用亚马逊。我尝试使用NodeJS并创建一个API,以便将其与前端连接起来,以便于使用,但不知何故,它不返回元素,即使该元素明显存在,并且它在Python中工作,如下所示……

这是我的NodeJS代码,为了回答这个问题,我把AMD Ryzen的链接作为一个网址:

代码语言:javascript
运行
复制
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代码:

代码语言:javascript
运行
复制
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的问题?欢迎任何意见。

EN

回答 1

Stack Overflow用户

发布于 2018-10-31 01:37:13

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

代码语言:javascript
运行
复制
$('#cerberus-data-metrics').data('asin-price')

现在它起作用了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53068297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档