我正在尝试做一些价格和运输重量的网络抓取,以便我可以计算我的项目的运输成本,在这种情况下,我使用亚马逊。我尝试使用NodeJS并创建一个API,以便将其与前端连接起来,以便于使用,但不知何故,它不返回元素,即使该元素明显存在,并且它在Python中工作,如下所示……
这是我的NodeJS代码,为了回答这个问题,我把AMD Ryzen的链接作为一个网址:
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的问题?欢迎任何意见。
发布于 2018-10-31 01:37:13
所以我最终解决了这个问题,老实说,我不知道为什么具有该id的跨度在Python版本中显示,而不是在NodeJS版本中,我所做的调试这是转储文件的整个响应,然后搜索并查看具有该特定ID的跨度是否在那里,结果发现它不在那里……幸运的是,我找到了一个带有附加data
属性的div,其中一个数据属性是价格,因此我将DOM选择器更改为:
$('#cerberus-data-metrics').data('asin-price')
现在它起作用了。
https://stackoverflow.com/questions/53068297
复制相似问题