通过普通浏览器访问http://www.oneblockdown.it/en/pharrell-williams-x-adidas-originals/footwear-lifestyle/men-unisex/pharrell-williams-x-adidas-originals-human-race-nmd-bb3070/4267时,它通常会在白页上停留2.5秒,运行一些javascript,然后自动刷新页面,然后它会加载实际的产品页面。
当我使用Node JS Request模块(使用普通的NodeJS http / https模块)请求页面时,它返回空白页面的html,而不是等待并显示产品页面。空白的html看起来像这样:https://pastebin.com/ZSeXuZRc
我如何允许它等待,执行代码就好像它是一个浏览器并允许它刷新并显示产品页面?
这是我目前的代码:
request(
{
url: 'https://www.oneblockdown.it/en/pharrell-williams-x-adidas-originals/footwear-lifestyle/men-unisex/pharrell-williams-x-adidas-originals-human-race-nmd-bb3070/4267',
method: 'GET',
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36',
'Host': 'www.oneblockdown.it',
'Cache-Control': 'max-age=0',
'Upgrade-Insecure-Requests': '1',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Referer': 'http://www.oneblockdown.it/en/footwear',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-US,en;q=0.9,la;q=0.8'
}
},
function(err, res, body) {
if(err || res.statusCode !== 200){
console.log(`FAILED | ${err}`)
} else {
//parse the body here. It should return product page, but is returning the white html with javascript
}
});
答案 0 :(得分:0)
不幸的是,你不能这样做。响应包括服务器在向该端点发送请求时返回的所有内容。如果在加载DOM时调用了javascript,即此window.onload
或document.ready
就是这个网页的情况,那么您将无法获得这些更改。
即使对于网络抓取工具来说,这也是一个问题(这就是为什么搜索引擎优化标准与提供所有重要信息相关而不使用任何脚本并留下与UI相关的任务,如样式和交互一旦页面已加载。