Node.js + Cheerio を使用してデータをキャプチャする方法について話しましょう
データを取得するには、Web スクレイピングを使用する必要があります。この記事では、Node と Cheerio を使用して Web サイトのデータをクロールする方法を紹介します。
始める前に、現地の法律と規制を遵守する必要があり、許可なく公開されたデータを無作為に取得しないでください。
前提条件
このチュートリアルに必要なものがいくつかあります:
- Node.js がインストールされている必要があります。 Node をお持ちでない場合は、Node.js ダウンロード ページ (https://nodejs.dev/download/) からシステムに合わせてダウンロードしてください。
- テキスト エディターが必要です。 VSCode や Atom
- など、マシンにインストールされています。少なくとも JavaScript、Node.js、およびドキュメント オブジェクト モデル (DOM) の基本を理解している必要があります。 )。
チェリオとは何ですか?
Cheerio は、Node.js で HTML と XML を解析するためのツールで、GitHub で非常に人気があり、23,000 個以上のスターが付いています。
高速かつ柔軟で使いやすいです。 Cheerio は JQuery のサブセットを実装しているため、JQuery に慣れている場合は簡単に使い始めることができます。
Cheerio と Web ブラウザーの主な違いは、cheerio は視覚的なレンダリングの生成、CSS の読み込み、外部リソースの読み込み、JavaScript の実行を行わないことです。これは単にマークアップを解析し、結果のデータ構造を操作するための API を提供します。これは、なぜそれが非常に速いのかを説明しています - cheerio ドキュメント 。
Cherio を使用して Web ページを取得したい場合は、まず axios や node-fetch などのパッケージを使用してタグを取得する必要があります。
Cheerio を使用して Node で Web ページをスクレイピングする方法
この例では、この Wikipedia ページにリストされているすべてのページをスクレイピングします国およびその他の法域向けの ISO 3166-1 alpha-3 コード。これは、ISO 3166-1 alpha-3 ページの Current Code セクションにあります。
これは、国/管轄区域とそれに対応するコードのリストです:ステップ 1 - 作業ディレクトリを作成します
このステップでは、ターミナルで次のコマンドを実行して、プロジェクトのディレクトリを作成します。このコマンドは、learn-cheerio という名前のファイルを作成します。必要に応じて、別の名前を付けることができます。
mkdir learn-cheerio
learn-cheerio上記のコマンドを正常に実行すると、作成されたという名前のフォルダーが表示されるはずです。
ステップ 2 - プロジェクトの初期化
このステップでは、プロジェクト ディレクトリに移動し、プロジェクトを初期化します。前の手順で作成したディレクトリを任意のテキスト エディタで開き、次のコマンドを実行してプロジェクトを初期化します。npm init -y
package.json が作成されます。
ステップ 3 - 依存関係のインストール
このステップでは、次のコマンドを実行してプロジェクトの依存関係をインストールします。これには数分かかりますので、しばらくお待ちください。npm i axios cheerio pretty
package.json の下のファイルに 3 つの依存関係が登録されます。
dependency最初の依存関係は
axios、2 番目は
cheerio、3 番目は
pretty です。
axios は、ノードとブラウザで実行できる非常に人気のある http クライアント です。 Cherio はトークンパーサーであるため、これが必要です。
为了让 Cheerio 解析标记并抓取您需要的数据,我们需要axios
用于从网站获取标记。如果您愿意,可以使用另一个 HTTP 客户端来获取标记。它不一定是axios
.
pretty是用于美化标记的 npm 包,以便在终端上打印时可读。
在下一部分中,您将检查将从中抓取数据的标记。
第 4 步 - 检查您要抓取的网页
在从网页中抓取数据之前,了解页面的 HTML 结构非常重要。
在此步骤中,您将检查要从中抓取数据的网页的 HTML 结构。
导航到Wikipedia 上的ISO 3166-1 alpha-3 代码页面。在“当前代码”部分下,有一个国家列表及其相应的代码。CTRL + SHIFT + I
您可以通过按chrome 上的组合键或右键单击然后选择“检查”选项来打开 DevTools 。
这是我在 chrome DevTools 中的列表:
在下一节中,您将编写用于抓取网页的代码。
第 5 步 - 编写代码以抓取数据
在本节中,你将编写用于抓取我们感兴趣的数据的代码。首先运行以下将创建app.js
文件的命令。
touch app.js
成功运行上述命令将app.js
在项目目录的根目录下创建一个文件。
像任何其他 Node 包一样,在开始使用它们之前,你必须首先require axios
、cheerio
和。你可以通过在刚刚创建pretty
的文件顶部添加下面的代码来做到这一点。app.js
const axios = require("axios"); const cheerio = require("cheerio"); const pretty = require("pretty");
在我们编写用于抓取数据的代码之前,我们需要学习cheerio
. 我们将解析下面的标记并尝试操作生成的数据结构。这将帮助我们学习 Cheerio 语法及其最常用的方法。
下面的标记是ul
包含我们元素的li
元素。
const markup = `
- Mango
- Apple
将上述变量声明添加到app.js
文件中
如何在 Cheerio 中加载标记
cheerio
你可以使用该cheerio.load
方法加载标记。该方法将标记作为参数。它还需要另外两个可选参数。如果你有兴趣,可以在文档中阅读有关它们的更多信息。
下面,我们传递第一个也是唯一需要的参数,并将返回值存储在$
变量中。我们使用该变量是因为cheerio 与Jquery$
的相似性。如果你愿意,可以使用不同的变量名。
将以下代码添加到你的app.js
文件中:
const $ = cheerio.load(markup); console.log(pretty($.html()));
如果你现在通过在终端上app.js
运行命令来执行文件中的代码node app.js
,你应该能够在终端上看到标记。这是我在终端上看到的:
如何在 Cheerio 中选择元素
Cheerio 支持大多数常见的 CSS 选择器,例如class
、id
和element
选择器等。在下面的代码中,我们选择带有类的元素fruits__mango
,然后将所选元素记录到控制台。将以下代码添加到你的app.js
文件中。
const mango = $(".fruits__mango"); console.log(mango.html()); // Mango
如果你使用命令执行,上述代码行将Mango
在终端上记录文本。app.js``node app.js
如何在 Cheerio 中获取元素的属性
您还可以选择一个元素并获取特定属性,例如class
、id
或所有属性及其对应值。
将以下代码添加到你的app.js
文件中:
const apple = $(".fruits__apple"); console.log(apple.attr("class")); //fruits__apple
上面的代码将登录fruits__apple
终端。fruits__apple
是所选元素的类。
如何循环遍历 Cheerio 中的元素列表
Cheerio 提供了.each
循环遍历多个选定元素的方法。
下面,我们选择所有元素并使用该方法li
循环遍历它们。.each
我们在终端上记录每个列表项的文本内容。
将以下代码添加到你的app.js
文件中。
const listItems = $("li"); console.log(listItems.length); // 2 listItems.each(function (idx, el) { console.log($(el).text()); }); // Mango // Apple
上面的代码会记录2
,也就是列表项的长度,执行完代码后会在终端上显示文字Mango
和。Apple``app.js
如何在 Cheerio 中将元素附加或添加到标记中
Cheerio 提供了一种将元素附加或附加到标记的方法。
该append
方法会将作为参数传递的元素添加到所选元素的最后一个子元素之后。另一方面,prepend
将在选定元素的第一个子元素之前添加传递的元素。
将以下代码添加到你的app.js
文件中:
const ul = $("ul"); ul.append("
在向标记添加和添加元素之后,这是我登录$.html()
终端时看到的内容:
这些是 Cheerio 的基础知识,可以帮助你开始网络抓取。
要从 Wikipedia 抓取我们在本文开头描述的数据,请将以下代码复制并粘贴到app.js
文件中:
// Loading the dependencies. We don't need pretty // because we shall not log html to the terminal const axios = require("axios"); const cheerio = require("cheerio"); const fs = require("fs"); // URL of the page we want to scrape const url = "https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3"; // Async function which scrapes the data async function scrapeData() { try { // Fetch HTML of the page we want to scrape const { data } = await axios.get(url); // Load HTML we fetched in the previous line const $ = cheerio.load(data); // Select all the list items in plainlist class const listItems = $(".plainlist ul li"); // Stores data for all countries const countries = []; // Use .each method to loop through the li we selected listItems.each((idx, el) => { // Object holding data for each country/jurisdiction const country = { name: "", iso3: "" }; // Select the text content of a and span elements // Store the textcontent in the above object country.name = $(el).children("a").text(); country.iso3 = $(el).children("span").text(); // Populate countries array with country data countries.push(country); }); // Logs countries array to the console console.dir(countries); // Write countries array in countries.json file fs.writeFile("coutries.json", JSON.stringify(countries, null, 2), (err) => { if (err) { console.error(err); return; } console.log("Successfully written data to file"); }); } catch (err) { console.error(err); } } // Invoke the above function scrapeData();
通过阅读代码,你了解正在发生的事情吗?如果没有,我现在将详细介绍。我还对每一行代码进行了注释,以帮助你理解。
在上面的代码中,我们需要文件顶部的所有依赖项,app.js
然后我们声明了scrapeData
函数。在函数内部,使用axios
. 然后将我们需要抓取的页面的获取 HTML 加载到cheerio
.
国家/地区列表及其对应iso3
代码嵌套在一个div
具有 . 类的元素中plainlist
。li
元素被选中,然后我们使用该方法循环遍历它们.each
。每个国家的数据都被抓取并存储在一个数组中。
使用命令运行上述代码后node app.js
,将抓取的数据写入countries.json
文件并打印在终端上。这是我在终端上看到的部分内容:
结论
感谢你阅读本文!我们已经介绍了使用cheerio
. 如果你想更深入地了解并完全了解其工作原理,可以前往Cheerio 文档。
更多node相关知识,请访问:nodejs 教程!
以上がNode.js + Cheerio を使用してデータをキャプチャする方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

ノード用の Docker イメージの選択は些細なことのように思えるかもしれませんが、イメージのサイズと潜在的な脆弱性は、CI/CD プロセスとセキュリティに大きな影響を与える可能性があります。では、最適な Node.js Docker イメージを選択するにはどうすればよいでしょうか?

Node 19 が正式リリースされましたので、この記事では Node.js 19 の 6 つの主要な機能について詳しく説明します。

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

Node.js はどのように GC (ガベージ コレクション) を行うのでしょうか?次の記事で詳しく説明します。

イベント ループは Node.js の基本的な部分であり、メイン スレッドがブロックされていないことを確認することで非同期プログラミングが可能になります。イベント ループを理解することは、効率的なアプリケーションを構築するために重要です。次の記事では、Node のイベント ループについて詳しく説明します。お役に立てれば幸いです。

当初、JS はブラウザ側でのみ動作していたため、Unicode でエンコードされた文字列の処理は簡単でしたが、バイナリ文字列や非 Unicode エンコード文字列の処理は困難でした。バイナリは、コンピュータのビデオ/オーディオ/プログラム/ネットワーク パッケージの最低レベルのデータ形式です。
