【发布时间】:2021-02-01 02:49:08
【问题描述】:
我目前正在处理一些个人项目,我只是想进行一些亚马逊抓取,以便获取产品详细信息,例如名称和价格。
我发现使用相同 id 的产品名称和价格最一致的视图是移动视图,这就是我使用它的原因。
问题是我无法得到价格。
我已经对价格中的名称(有效)进行了完全相同的查询选择器,但没有成功。
const puppeteer = require('puppeteer');
const url = 'https://www.amazon.com/dp/B01MUAGZ49';
(async () => {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.setViewport({ width: 360, height: 640 });
await page.goto(url);
let producData = await page.evaluate(() => {
let productDetails = [];
let elements = document.querySelectorAll('#a-page');
elements.forEach(element => {
let detailsJson = {};
try {
detailsJson.name = element.querySelector('h1#title').innerText;
detailsJson.price = element.querySelector('#newBuyBoxPrice').innerText;
} catch (exception) {}
productDetails.push(detailsJson);
});
return productDetails;
});
console.dir(producData);
})();
我应该在 console.dir 中获得名称和价格,但现在我只能获得
[ { name: 'Nintendo Switch – Neon Red and Neon Blue Joy-Con ' } ]
【问题讨论】:
-
由于该 id 仅在移动视图中可见,您应该模拟移动设备(使用 page.emulate() 方法)。见这里github.com/GoogleChrome/puppeteer/blob/v1.6.2/docs/…
-
我已经在用puppeteer的宽度和高度做了,id为“title”的产品名称只出现在手机上,但价格有点被亚马逊屏蔽了。编辑:只是没有,仍然不起作用我将
isMobile: true添加到 setViewport 选项中 -
你是对的,但由于我的位置,#newBuyBoxPrice 不存在。谢谢!
标签: javascript node.js puppeteer