【问题标题】:How do I scrape a site that loads data asynchronously using node.js?如何抓取使用 node.js 异步加载数据的站点?
【发布时间】:2020-05-14 10:09:09
【问题描述】:

我正在尝试使用 Axios 来发出请求并使用 Cheerio 来解析数据。我遇到的问题是我正在请求在显示数据之前加载数据的站点。这导致 HTML 返回“正在加载...”而不是实际数据。有没有办法配置 Axios 请求以等待数据完成加载,或者我应该使用不同的库来发出请求?

【问题讨论】:

    标签: node.js asynchronous web-scraping axios cheerio


    【解决方案1】:

    您需要检查正在执行的 XHR 调用,并针对该 URL 发出请求,因为您想要的内容不是来自 main URL,而是来自其他 API 调用.

    但是,使用 Javascript 抓取正在动态加载的内容的最简单方法是使用 puppeteer

     const puppeteer = require('puppeteer')
     const browser = await puppeteer.launch({ headless: true })
     const page = await browser.newPage()
     await page.goto('https://example.com')
    
     await page.waitForSelector(".someSelectorThatsLoadedWithJavascript")
     // get whatever value you want now.
    

    【讨论】:

    • 谢谢! Puppeteer 正是我所需要的。我没有使用等待选择器,而是将 {waitUntil: 'networkidle2'} 作为 page.goto() 的第二个参数传入 ---------------- await page.goto('@ 987654322@', {waitUntil: 'networkidle2'});
    • 是的,这也有效,这取决于您要抓取的内容。很高兴我能帮忙:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 2014-09-08
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多