网络抓取的简短入门教程
网络抓取是指下载一个网页并从中提取某种信息的任务。
我最近做了一个小项目,用Arduino板连接了一个LCD显示屏。使用Johnny-Five,它可以让我们用Node.js对Arduino进行编程,我想获取在山顶测量的温度,并在Arduino板上显示出来。
我使用Puppeteer来完成搜刮的任务。Puppeteer是一个由Google建立的伟大工具。它是一个Node库,我们可以用它来控制一个无头的Chrome实例。
这意味着我们基本上是在使用Chrome,但以编程的方式。
Puppeteer有很多实际用途,包括自动化测试、制作屏幕截图、创建单页应用程序的服务器端渲染版本等等。
首先用以下方式安装它
在一个Node.js文件中,要求它。
const puppeteer = require('puppeteer');
然后我们可以使用launch() 方法来创建一个浏览器实例。
(async () => {
const browser = await puppeteer.launch()
})()
我们使用await ,因此我们必须把这个方法调用包装成一个异步函数,并立即调用。
接下来我们可以在browser 对象上使用newPage() 方法来获得page 对象。
(async () => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
})()
接下来我们调用page 对象上的goto() 方法来加载该页面。
(async () => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto('https://website.com')
})()
最后,我们可以通过调用page 的evaluate() 方法来获得页面内容。这个方法需要一个回调函数,我们可以在其中添加所需的代码来检索我们需要的页面元素。该函数是在页面的上下文中执行的,所以我们可以访问document 和所有的浏览器API。我们返回一个新对象,这将是我们evaluate() 方法调用的结果。
我们可以使用选择器API并从页面中检索数据。
(async () => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto('https://website.com')
const result = await page.evaluate(() => {
//...
})
})()
让我们来谈谈我遇到的特殊问题。这是一个承载气象站的页面,位于3315米的山顶上: http://www.meteocentrale.ch/it/europa/svizzera/meteo-corvatsch/details/S067910/

我想得到这个-9°C 。使用浏览器检查器,我可以看到它有一个column-4 类。这不是一个理想的类名,因为它没有意义,而且如果他们决定增加一个新的栏目,它可能会改变,但这就是我们得到的东西。

这就是到现在为止的完整代码。
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto('http://www.meteocentrale.ch/it/europa/svizzera/meteo-corvatsch/details/S067910/')
const result = await page.evaluate(() => {
let temperature = document.querySelector('.column-4').innerText
return {
temperature
}
})
console.log(result)
browser.close()
})()
如果我们运行这段代码,result ,将有这个值。
或者现在的温度是多少。