从网页抓取数据(如何使用JavaScript.js开发网络抓取工具?(一))

优采云 发布时间: 2021-12-25 03:05

  从网页抓取数据(如何使用JavaScript.js开发网络抓取工具?(一))

  您可以使用图灵完整的编程语言来开发 Web 爬虫。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 抓取。然后启动命令提示符(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()}`)

  搜索新闻网站

  动态网站 对网络爬虫工具提出了严峻的挑战。网上的网站最初是作为静态的网站开发的,几乎没有交互形式。对于这些网站,当你发送一个页面请求时,页面的所有内容都会加载到页面上,这是网络爬虫最容易爬取的模型。但是,随着动态网站的出现,互联网上的许多页面无法在这些页面上加载其内容。某些内容取决于 JavaScript 事件。如果这样取网站,则需要使用Puppeteer。

  Puppeteer的作用是控制Chrome浏览器访问网站,触发一个会加载内容的JavaScript事件,然后在加载内容时抓取需要的数据。你可以用 Puppeteer 做很多事情。在下面的示例中,代码从 IMDb 中获取“Quick 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 跟踪和拦截以及 Captcha 系统。一些 网站 还使用 cookie、本地存储和浏览器指纹来防止机器人流量。因此,我建议您阅读 Axion 文档以了解如何使用代理、更改用户代理字符串和其他标头以及旋转它们。有关如何转义块的更全面的 文章,请阅读我们的 文章。如何抢网站,永远不会被屏蔽。

  结论

  随着 Node.js 的发展,现在所有看不起 JavaScript 的人都应该知道 JavaScript 和其他编程语言一样。与过去不同的是,您现在可以使用 JavaScript 开发一个无需任何浏览器即可运行的网络爬虫,它会在 Node.js 的帮助下运行在服务器或本地 PC 上。借助JavaScript、Node.js、代理和反验证码系统,Node可以随意搜索任何你喜欢的网站。

  这个 文章 有用吗?

  点击星标以对其进行评分!

  提交成绩

  平均评分 0 / 5. 投票数:0

  至今没有投票!成为第一个对此 文章 发表评论的人。

  相关文章

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线