scrapestack:用于网站抓取的 API

❥ 赞助

并非每个网站都有 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 次请求来试用它,并且在任何付费计划中,它都会随着更多功能而大幅提升。

直接链接 →