请求(npm程序包)未返回完整的html

时间:2018-12-15 12:24:43

标签: javascript node.js web-scraping

我正在使用请求来获取网页的HTML。当我为http://orangina.eu/执行此操作时,它仅返回一些HTML。我注意到,与在Chrome中使用“查看页面源代码”获得的HTML和使用“检查”(完整HTML)获得的HTML相同。我的猜测是,它会在通过Javascript加载其他HTML之前获取HTML。我查看了请求文档,对此一无所获。

为什么会这样,有没有办法获取完整的HTML(使用Request或任何其他包)?谢谢。

1 个答案:

答案 0 :(得分:1)

谢谢,安迪。安迪(Andy)在评论中回答了该问题,但我将在此处添加它,以便对该问题进行正式回答,并添加一些我在跟随安迪(Andy)领导后学到的更多细节。 NPM package Puppeteer解决了这个问题。它使您可以在Node应用程序中运行无头Chrome浏览器。

使用Puppeteer获取要共享的http://orangina.eu/ HTML时,我学到了一件事。您会注意到,加载网站需要花费几秒钟的时间。因此,如果您使用此代码:

const browser = await puppeteer.launch();

const page = await browser.newPage();
await page.goto('http://orangina.eu/');

console.log(await page.content());
await page.screenshot({path: 'screenshot.png'});

await browser.close();

您将获得与Request相同的东西-最终HTML的一小部分。这是因为他们俩都在HTML加载之前就抓住了HTML。幸运的是,Puppeteer可以选择等待获取内容。我看了一下,看看Request是否有这个并且什么都没找到。这是获取所有HTML的代码,请注意5秒钟的等待时间:

const browser = await puppeteer.launch();

const page = await browser.newPage();
await page.goto('http://orangina.eu/');
await page.waitFor(5000);

console.log(await page.content());
await page.screenshot({path: 'screenshot.png'});

await browser.close();