从网页抓取视频(如何使用JavaScript.js开发网络抓取工具?(一))
优采云 发布时间: 2022-04-19 00:42从网页抓取视频(如何使用JavaScript.js开发网络抓取工具?(一))
可以使用图灵完备的任何编程语言来开发网络爬虫。Java、PHP、Python、JavaScript、C/C++、C#等已经被用于编写网络爬虫。尽管如此,在开发网络爬虫方面,一些语言比其他语言更受欢迎。JavaScript 不是一个流行的选择。近年来,由于网络爬虫库的出现,它作为一种开发网络爬虫工具的语言越来越受欢迎。在本文中,我将向您展示如何使用 JavaScript 开发网络爬虫。
Node.js – 改变游戏规则
JavaScript 最初是为前端 Web 开发而开发的,旨在为网页添加交互性和响应性。在浏览器之外,JavaScript 无法运行。所以你不能将它用于后端开发,因为你可以使用 Python、Java 和 C++ 之类的东西。然后,这意味着您需要精通两种语言才能进行前端和后端开发。但是,开发人员认为 JavaScript 是一种完整的编程语言,因此不应仅限于浏览器环境。
这促使 Ryan Dahl 开发了 Node.js。Node.js 是基于 Chrome V8 JavaScript 引擎构建的 JavaScript 运行时环境。使用 Node.js,您可以编写代码并让它们在 PC 和服务器上运行,就像 PHP、Java 和 Python 一样。现在,这导致许多开发人员将 JavaScript 作为一门完整的语言认真对待——为此,已经开发了许多库和框架,以使使用 JavaScript 对后端进行编程变得容易。使用 Node.js,您现在可以用一种语言编写前端和后端代码。
作为一名 JavaScript 开发人员,您可以使用 JavaScript 开发一个完整的网页抓取工具,并使用 Node.js 运行它。我将向您展示如何使用 JavaScript 和一些 Node.js 库编写网络爬虫。
安装和设置
与安装在每个现代浏览器中的 JavaScript 运行时不同,您需要安装 Node.js 才能使用它进行开发。您可以从 Node.js 官方 网站 安装 Node.js – Windows 用户的文件大小小于 20MB。安装完Node.js后,可以在命令行输入如下代码,查看是否安装成功。
节点
如果没有返回错误信息,则节点安装成功。您还可以通过在已安装程序列表中查找 Node.js 应用程序来确认。安装后,下一步是安装必要的库/模块以进行网络抓取。对于本教程,我建议您在桌面上创建一个新文件夹并将其命名为 Web scraping。然后启动命令提示符(MS-DOS/命令行)并使用以下命令导航到文件夹。
cd desktop/web scraper
现在,让我们开始为网络爬虫安装 Node.js 包——不要关闭命令提示符。
Axios 模块是最重要的网页抓取库之一。它是一个 HTTP 客户端,就像浏览器一样,它可以为您发送 Web 请求并获得响应。您将使用它来下载要从中抓取数据的页面。要安装 Axios,请使用以下代码。
npm install axios
Cheerio 是一个轻量级库,您可以使用它来采集使用 Axios 下载的 HTML 页面的 DOM 以采集所需的数据。它的语法类似于 jQuery,所以如果你已经知道如何使用 jQuery,那么使用它应该没有问题。使用以下命令安装。
npm install request
如果您从静态页面中抓取,上述库将完成这项工作。但是,当您打算从页面中抓取的内容是动态生成的并且依赖于 JavaScript 来均匀加载时,Axios 将没有用处,因为它仅在服务器发起请求时下载服务器发送的内容。对于依赖 JavaScript 事件来加载内容的动态 网站,您将需要一个浏览器自动化工具来帮助您控制浏览器,以便加载所有内容并进行抓取。
npm install puppeteer
有关的:
从静态 网站 抓取
当我们不考虑反爬网系统时,从静态网页爬网是最容易的。这是因为,对于静态网页,您只需使用 HTTP 客户端 (Axios) 来请求页面内容,网站 的服务器将返回 HTML 格式的响应。然后,您可以使用 Cheerio 遍历 DOM 并抓取您需要的数据。在下面的示例中,我使用 JavaScript 来抓取 h1 标记内的文本。在下面的代码中,我使用 axios 下载整个页面,然后使用 Cheerio 集合遍历 DOM 并抓取 h1 标签内的文本。
constaxios = require("axios")
const cheerio = require("cheerio")
async function fetchHTML(url) {
const{ data } = await axios.get(url)
return cheerio.load(data)
}
const $ = await fetchHTML("https://example.com")
// Print the full HTML
console.log(`Site HTML: ${$.html()}\n\n`)
// Print some specific page content
console.log(`First h1 tag: ${$('h1').text()}`)
搜索新闻网站
动态网站 对网络爬虫提出了严峻的挑战。Internet 上的网站 最初是作为静态网站 开发的,几乎没有交互形式。对于这些网站,当你发送一个页面请求时,该页面的所有内容都会加载到那个页面上,这是网络爬虫最容易爬取的模型。但是,随着动态 网站 的出现,Internet 上的许多页面无法将其内容加载到这些页面上。某些内容依赖于 JavaScript 事件。如果您以这种方式欺骗 网站,则需要使用 Puppeteer。
Puppeteer 的作用是控制 Chrome 浏览器访问 网站,触发将加载内容的 JavaScript 事件,然后在加载内容时抓取需要的数据。你可以用 Puppeteer 做很多事情。在下面的示例中,代码从 IMDb 中获取“Fast Five”电影的标题和摘要。您可以使用 Puppeteer 做更多事情;在此处阅读 Puppeteer 文档以了解有关其 API 和用法的更多信息。
const puppeteer = require("puppeteer");
async function collectData() {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto
("https://www.imdb.com/title/tt1013752/");
const data = await page.evaluate(() => {
const title = document.querySelector(
"#title-overview-widget >div.vital>
div.title_block> div >div.titleBar>
div.title_wrapper> h1"
).innerText;
const summary = document.querySelector(
"#title-overview-widget >
div.plot_summary_wrapper>div.plot_summary>
div.summary_text"
).innerText;
// This object will be stored in the data variable
return {
title,
summary,
};
});
await browser.close();
}
collectData();
反爬技术注意事项
查看上面的代码,我没有使用该技术绕过反机器人系统。这是因为本教程是简约的并且是概念证明。事实上,如果你开发自己的网络爬虫而不考虑反爬虫系统,你的机器人会在数百次请求后被阻止。这是因为 网站 不想被弃用,因为它不会为 网站 增加任何价值,反而会增加其运行成本。因此,他们安装了反爬虫系统来阻止抓取和其他形式的自动访问。
网站最流行的反爬虫技术包括 IP 跟踪和阻止以及验证码系统。一些 网站 还使用 cookie、本地存储和浏览器指纹来防止机器人流量。因此,我建议阅读 Axion 文档以了解如何使用代理、更改用户代理字符串和其他标头以及旋转它们。有关如何转义块的更全面的 文章,请阅读我们的 文章。如何抓取 网站 并且永远不会被阻止。
结论
随着 Node.js 的发展,现在所有看不起 JavaScript 的人都应该知道 JavaScript 和其他任何编程语言一样。与过去不同,您现在可以使用 JavaScript 开发一个不需要任何浏览器运行的网络爬虫,它将在 Node.js 的帮助下运行在服务器或本地 PC 上。借助 JavaScript、Node.js、代理和反验证码系统,Node 可以自由搜索您喜欢的任何 网站。
JS 抓取
喜欢(0)
最好的网页抓取工具