我正在尝试抓取下面网页上的特定字符串:
https://www.booking.com/hotel/nl/scandic-sanadome-nijmegen.en-gb.html?checkin=2020-09-19;checkout=2020-09-20;i_am_from=nl;
我想从这个网页的信息来源是在字符串下面的序列号(这是我可以搜索时,右键单击鼠标-〉
"View Page source"):
name="nr_rooms_4377601_232287150_0_1_0"/ name="nr_rooms_4377601_232287150_1_1_0"
我使用的是“puppeteer
”,下面是我的代码:
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
//await page.goto('https://example.com');
const response = await page.goto("My-url-above");
let bodyHTML = await page.evaluate(() => document.body.innerHTML);
let outbodyHTML = await page.evaluate(() => document.body.outerHTML);
console.log(await response.text());
console.log(await page.content());
await browser.close();
})()
但是我在response.text()
或page.content()
中找不到要查找的字符串。
我在页面中使用了错误的方法吗?
我如何将实际的页面源转储到网页上,与我右键单击鼠标完全相同?
2条答案
按热度按时间kzipqqlq1#
如果你调查这些字符串出现的位置,你可以看到在
<select>
元素中有一个特定的类(.hprt-nos-select
):你会等到这个元素被加载到DOM中,然后它也会在页面源代码中可见:
但你的问题实际上在于,你访问的URL有一些额外的URL参数:
?checkin=2020-09-19;checkout=2020-09-20;i_am_from=nl;
这些参数没有被puppeteer考虑在内(你可以截取一个完整的页面截图,你会看到它仍然有默认的酒店搜索表单,没有具体的酒店优惠,而不是你所期望的)。您应该使用puppeteer(
page.click()
等)与搜索表单进行交互,以自行设置日期和来源国,以实现预期的页面内容。zzlelutf2#
似乎booking.com正在阻止你。强烈建议你使用带有
puppeteer-extra
和puppeteer-extra-plugin-stealth
软件包的Puppeteer,这样可以防止网站检测到你使用的是无头Chromium或者是网页驱动。在你进入URL后,你需要等待页面加载:
作为替代方案,要获取有关酒店的所有信息,您可以使用hotels-scraper-js库。然后您的代码将是:
输出如下所示: