并非每个网站都有 API 可以访问其数据。事实上,大多数网站都没有。如果您需要提取这些数据,一种方法是“抓取”它。也就是说,在网页浏览器(您自动化的)中加载页面,在 DOM 中找到您要查找的内容,然后获取它。
如果您想处理成本、维护和技术债务,您可以自己动手。例如,这是“无头”浏览器的主要用例之一,例如 Puppeteer 如何启动和控制无头 Chrome。
或者,您可以使用像 scrapestack 这样的工具,它是一个现成的 API,不仅可以为您执行抓取,而且可能比您自己尝试执行抓取做得更好、更快,并且具有更多选项。
假设我的目标是从 Meetup.com 页面提取最新的已完成聚会。Meetup.com 有一个 API,但它价格昂贵,需要 OAuth 等。我们只需要过去聚会的名称和链接,所以让我们直接从页面上提取它。
我们可以看到我们在 DOM 中需要什么

为了体验一下,让我们使用 scrapestack API 客户端 jQuery 来抓取它
$.get('https://api.scrapestack.com/scrape',
{
access_key: 'MY_API_KEY',
url: 'https://www.meetup.com/BendJS/'
},
function(websiteContent) {
// we have the entire sites HTML here!
}
);
在该回调函数内,我现在还可以使用 jQuery 遍历 DOM,获取我想要的部分,并在我们的网站上构建我需要的内容
// Get what we want
let event = $(websiteContent)
.find(".groupHome-eventsList-pastEvents .eventCard")
.first();
let eventTitle = event
.find(".eventCard--link")[0].innerText;
let eventLink =
`https://www.meetup.com/` +
event.find(".eventCard--link").attr("href");
// Use it on page
$("#event").append(`
${eventTitle}
`);
在实际使用中,如果我们像这样在客户端执行操作,我们将使用一些基本的存储,这样我们就不必在每次页面加载时都访问 API,例如将结果存储在 localStorage
中并在几天后使其失效或类似操作。
它有效!

实际上,我们更有可能在服务器端进行抓取。一方面,这是保护您的 API 密钥的方式,这是您的责任,如果您在客户端直接使用 API,则在面向公众的网站上是不可能的。
我个人可能会创建一个 云函数 来执行此操作,这样我就可以继续使用 JavaScript (Node.js),并有机会将数据存储在某个地方的 存储 中。
我想说 去查看文档,看看下次您需要进行抓取时,这是否是正确的答案。无论如何,您在免费计划中可以获得 10,000 次请求来试用它,并且在任何付费计划中,它都会随着更多功能而大幅提升。