js 抓取网页内容(在这篇文章中,我们将学习使用浏览器自动化和JavaScript来网页)
优采云 发布时间: 2021-10-08 15:45js 抓取网页内容(在这篇文章中,我们将学习使用浏览器自动化和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 抓取数据。不管网站的类型,我们都可以爬取我们想要的资源。