js 抓取网页内容(在这篇文章中,我们将学习使用浏览器自动化和JavaScript来网页)

优采云 发布时间: 2021-10-08 15:45

  js 抓取网页内容(在这篇文章中,我们将学习使用浏览器自动化和JavaScript来网页)

  在这个文章中,我们将学习使用浏览器自动化和JavaScript来抓取网页。我们将使用 puppeteer。

  Puppeteer 是一个节点库 API,允许我们控制无头 Chrome。Headless Chrome 是一种无需实际运行 Chrome 即可运行 Chrome 浏览器的方法。

  如何进行

  一般来说,网络爬虫分为“通过HTTP请求获取数据”和“通过解析HTML DOM提取重要数据”两部分

  库和工具

  “傀儡师”和“Nodejs”

  我们想要捕捉的

  我们将通过这个网站提供Scrape Book的价格和标题。这是一家专门为帮助人们练习刮痧而设立的书店。

  设置

  我们的设置非常简单。只需创建一个文件夹并安装 puppeteer。要创建文件夹并安装库,请键入以下命令。我假设你已经安装了 Node.js。

  

  现在,在该文件夹中创建一个您喜欢的任何名称的文件。我用的名字是scraping.js

  准备食物

  现在,在 scraping.js 中插入以下样板代码

  

  让我们逐行浏览此示例。第 1 行:我们需要之前安装的 Puppeteer 依赖项;第 3-7 行:这是我们的主要功能抓取。这个函数会保存我们所有的自动化代码;第 9 行:在这里,我们调用了 scrape() 函数(以运行该函数)。

  需要注意的重要一点是,我们的 scrape() 函数是一个异步函数,并利用了 ES 2017 新的 async/await 函数。由于该函数是异步的,因此在调用该函数时将返回一个 Promise。当 async 函数最终返回一个值时,Promise 将解析(如果有错误,则拒绝)。

  由于我们使用的是 async 函数,我们可以使用 await 表达式,它会暂停函数执行并等待 Promise 解析完成,然后再继续。随着本教程的继续,它会变得更加清晰。

  我们可以通过在scrape函数中添加一行代码来测试上面的代码。试试看:

  

  现在 node scrape.js 正在控制台中运行。测试退出!完美,我们返回的值正在记录到控制台。现在我们可以开始填充我们的刮取功能。

  第 1 步:设置

  我们需要做的第一件事是创建浏览器的实例。打开一个新页面并导航到一个 URL。我们的操作方法如下:

  

  让我们逐行分解:首先,我们创建浏览器并将无头模式设置为 false。这使我们能够准确地观察发生了什么:

  

  然后,我们在浏览器中创建一个新页面:

  

  接下来,我们转到 URL:

  

  (可选)我添加了 1,000 毫秒的延迟。虽然通常没有必要,但这将确保页面上的所有内容都已加载:

  

  最后,当一切都完成后,我们将关闭浏览器并返回

  

  设置完成。现在,让我们开始刮吧!

  第2步:刮

  现在您可能对我们将要捕获的内容有所了解。我们将获取一本书的书名及其价格。

  

  查看 Puppeteer API,我们可以找到一种方法,可以让我们从页面中获取 HTML。为了检索这些值,我们将使用 page.evaluate() 方法。这个方法允许我们使用内置的 DOM 选择器,比如 querySelector()。

  我们需要做的第一件事是创建 page.evaluate() 函数并将返回值保存到名称 result 中:

  

  在我们的职能范围内,我们可以选择所需的元素。我们将再次使用 Google Developers 工具来解决这个问题。右键单击标题并选择检查:

  

  正如您将在 Elements 面板中看到的,标题只是一个 h1 元素。现在,我们可以使用以下代码选择此元素:

  

  由于我们希望文本收录在此元素中,因此我们需要添加插件 .innerText。最终代码如下:

  

  同样,我们可以通过右键单击并检查元素来选择价格:

  

  如您所见,我们的价格是 price_color。我们可以使用这种类型的选择元素及其内部文本。这是代码:

  

  现在我们有了所需的文本,我们可以将它返回给一个对象:

  

  奇妙!现在,我们选择标题和价格,将其保存到对象中,然后将对象的值返回到结果变量中。放在一起看起来是这样的:

  

  剩下要做的就是返回我们的代码 result 以便它可以记录在控制台中:返回结果。

  您的最终代码应如下所示:

  

  现在,您可以通过在控制台中键入以下内容来运行 Node 文件:

  

  如果没有问题,您应该会在屏幕上看到所选书籍的书名和价格。

  让它完美

  现在,初学者从主页本身爬取所有书名变得更加困难。但是,这为您提供了一个练习新爬行技能的绝佳机会!

  提示:这个挑战和前面的例子的主要区别是需要遍历的结果数量很多。您可以通过如下设置代码来做到这一点:

  

  最后

  在本文中,我们学习了如何使用 Nodejs & Puppeteer 抓取数据。不管网站的类型,我们都可以爬取我们想要的资源。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线