데이터를 얻으려면 웹 스크래핑을 사용해야 합니다. 이 글에서는 Node와 Cheerio를 사용하여 웹사이트 데이터를 크롤링하는 방법을 소개하겠습니다. 모든 분들께 도움이 되길 바랍니다!
시작하기 전에 현지 법률 및 규정을 준수해야 하며, 허가 없이 공개되는 데이터를 임의로 가져오지 마십시오.
전제 조건
다음은 이 튜토리얼에 필요한 몇 가지 사항입니다.
- Node.js가 설치되어 있어야 합니다. Node가 없으면 Node.js 다운로드 페이지(https://nodejs.dev/download/)에서 시스템에 맞게 다운로드하세요.
- 컴퓨터에 텍스트 편집기가 설치되어 있어야 합니다. VSCode 또는 Atom
- 과 같은 머신에서는 최소한 JavaScript, Node.js 및 DOM(문서 개체 모델)에 대한 기본적인 이해가 있어야 합니다.
치리오란 무엇인가요?
Cheerio는 Node.js에서 HTML과 XML을 구문 분석하는 도구로, GitHub에서 별 23,000개가 넘는 인기를 누리고 있습니다.
빠르고 유연하며 사용하기 쉽습니다. JQuery의 하위 집합을 구현하므로 JQuery에 이미 익숙하다면 Cheerio를 쉽게 시작할 수 있습니다.
Cheerio와 웹 브라우저의 주요 차이점은 Cheerio가 시각적 렌더링을 생성하지 않고, CSS를 로드하고, 외부 리소스를 로드하거나 JavaScript를 실행하지 않는다는 것입니다. 이는 단순히 마크업을 구문 분석하고 결과 데이터 구조를 조작하기 위한 API를 제공합니다. 이것이 왜 매우 빠른지 설명합니다 - cheerio 문서.
cherio를 사용하여 웹 페이지를 가져오려면 먼저 axios 또는 node-fetch와 같은 패키지를 사용하여 태그를 가져와야 합니다.
Cheerio를 사용하여 Node에서 웹 페이지를 스크랩하는 방법
이 예에서는 이 Wikipedia 페이지 에 나열된 모든 국가 및 기타 관할권에 대한 ISO 3166-1 alpha-3 코드를 스크랩합니다. ISO 3166-1 alpha-3 페이지의 현재 코드 섹션 아래에 있습니다.
국가/관할권 및 해당 코드 목록은 다음과 같습니다.
1단계 - 작업 디렉터리 만들기
이 단계에서는 다음 명령을 실행하여 작업 디렉터리를 만듭니다. 터미널 프로젝트에서 디렉토리를 생성합니다. 이 명령은 learn-cheerio
라는 파일을 생성합니다. 원하는 경우 다른 이름을 지정할 수 있습니다. learn-cheerio
. 如果你愿意,你可以给它一个不同的名字。
mkdir learn-cheerio
learn-cheerio
成功运行上述命令后,您应该能够看到一个名为 created 的文件夹。
在下一步中,您将在您喜欢的文本编辑器中打开刚刚创建的目录并初始化项目。
第 2 步 - 初始化项目
在此步骤中,您将导航到项目目录并初始化项目。在您喜欢的文本编辑器中打开您在上一步中创建的目录,并通过运行以下命令来初始化项目。
npm init -y
成功运行上述命令将package.json
在项目目录的根目录下创建一个文件。
在下一步中,您将安装项目依赖项。
第 3 步 - 安装依赖项
在此步骤中,您将通过运行以下命令来安装项目依赖项。这将需要几分钟,所以请耐心等待。
npm i axios cheerio pretty
成功运行上述命令将在字段package.json
下的文件中注册三个依赖项。dependencies
第一个依赖是axios
,第二个是cheerio
,第三个是pretty
touch app.js
learn-cheerio
위 명령을 성공적으로 실행하면 폴더가 생성된 것을 볼 수 있습니다. 다음 단계에서는 즐겨 사용하는 텍스트 편집기에서 방금 생성한 디렉터리를 열고 프로젝트를 초기화합니다.
2단계 - 프로젝트 초기화🎜이 단계에서는 프로젝트 디렉터리로 이동하여 프로젝트를 초기화합니다. 즐겨 사용하는 텍스트 편집기에서 이전 단계에서 만든 디렉터리를 열고 다음 명령을 실행하여 프로젝트를 초기화합니다. 🎜const axios = require("axios");
const cheerio = require("cheerio");
const pretty = require("pretty");
🎜위 명령을 성공적으로 실행하면 프로젝트 디렉터리의 루트 디렉터리에 package.json
파일이 생성됩니다. 🎜🎜다음 단계에서는 프로젝트 종속성을 설치합니다. 🎜🎜3단계 - 종속성 설치 🎜🎜🎜이 단계에서는 다음 명령을 실행하여 프로젝트 종속성을 설치합니다. 이 작업은 몇 분 정도 걸리므로 잠시 기다려 주십시오. 🎜const markup = `
- Mango
- Apple
`;🎜위 명령을 성공적으로 실행하면 package.json
필드 아래 파일에 세 가지 종속성이 등록됩니다. 종속성
첫 번째 종속성은 axios
이고, 두 번째 종속성은 cheerio
이며, 세 번째 종속성은 pretty
입니다. 🎜🎜🎜axios🎜는 노드와 브라우저에서 실행되는 매우 인기 있는 🎜http 클라이언트🎜입니다. Cherio는 토큰 파서이기 때문에 필요합니다. 🎜
const markup = `
- Mango
- Apple
package.json
필드 아래 파일에 세 가지 종속성이 등록됩니다. 종속성
첫 번째 종속성은 axios
이고, 두 번째 종속성은 cheerio
이며, 세 번째 종속성은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

JavaScript는 웹 페이지의 상호 작용과 역학을 향상시키기 때문에 현대 웹 사이트의 핵심입니다. 1) 페이지를 새로 고치지 않고 콘텐츠를 변경할 수 있습니다. 2) Domapi를 통해 웹 페이지 조작, 3) 애니메이션 및 드래그 앤 드롭과 같은 복잡한 대화식 효과를 지원합니다. 4) 성능 및 모범 사례를 최적화하여 사용자 경험을 향상시킵니다.

C 및 JavaScript는 WebAssembly를 통한 상호 운용성을 달성합니다. 1) C 코드는 WebAssembly 모듈로 컴파일되어 컴퓨팅 전력을 향상시키기 위해 JavaScript 환경에 도입됩니다. 2) 게임 개발에서 C는 물리 엔진 및 그래픽 렌더링을 처리하며 JavaScript는 게임 로직 및 사용자 인터페이스를 담당합니다.

JavaScript는 웹 사이트, 모바일 응용 프로그램, 데스크탑 응용 프로그램 및 서버 측 프로그래밍에서 널리 사용됩니다. 1) 웹 사이트 개발에서 JavaScript는 HTML 및 CSS와 함께 DOM을 운영하여 동적 효과를 달성하고 jQuery 및 React와 같은 프레임 워크를 지원합니다. 2) 반응 및 이온 성을 통해 JavaScript는 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용됩니다. 3) 전자 프레임 워크를 사용하면 JavaScript가 데스크탑 애플리케이션을 구축 할 수 있습니다. 4) node.js는 JavaScript가 서버 측에서 실행되도록하고 동시 요청이 높은 높은 요청을 지원합니다.

Python은 데이터 과학 및 자동화에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 데이터 처리 및 모델링을 위해 Numpy 및 Pandas와 같은 라이브러리를 사용하여 데이터 과학 및 기계 학습에서 잘 수행됩니다. 2. 파이썬은 간결하고 자동화 및 스크립팅이 효율적입니다. 3. JavaScript는 프론트 엔드 개발에 없어서는 안될 것이며 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축하는 데 사용됩니다. 4. JavaScript는 Node.js를 통해 백엔드 개발에 역할을하며 전체 스택 개발을 지원합니다.

C와 C는 주로 통역사와 JIT 컴파일러를 구현하는 데 사용되는 JavaScript 엔진에서 중요한 역할을합니다. 1) C는 JavaScript 소스 코드를 구문 분석하고 추상 구문 트리를 생성하는 데 사용됩니다. 2) C는 바이트 코드 생성 및 실행을 담당합니다. 3) C는 JIT 컴파일러를 구현하고 런타임에 핫스팟 코드를 최적화하고 컴파일하며 JavaScript의 실행 효율을 크게 향상시킵니다.

실제 세계에서 JavaScript의 응용 프로그램에는 프론트 엔드 및 백엔드 개발이 포함됩니다. 1) DOM 운영 및 이벤트 처리와 관련된 TODO 목록 응용 프로그램을 구축하여 프론트 엔드 애플리케이션을 표시합니다. 2) Node.js를 통해 RESTFULAPI를 구축하고 Express를 통해 백엔드 응용 프로그램을 시연하십시오.

웹 개발에서 JavaScript의 주요 용도에는 클라이언트 상호 작용, 양식 검증 및 비동기 통신이 포함됩니다. 1) DOM 운영을 통한 동적 컨텐츠 업데이트 및 사용자 상호 작용; 2) 사용자가 사용자 경험을 향상시키기 위해 데이터를 제출하기 전에 클라이언트 확인이 수행됩니다. 3) 서버와의 진실한 통신은 Ajax 기술을 통해 달성됩니다.

보다 효율적인 코드를 작성하고 성능 병목 현상 및 최적화 전략을 이해하는 데 도움이되기 때문에 JavaScript 엔진이 내부적으로 작동하는 방식을 이해하는 것은 개발자에게 중요합니다. 1) 엔진의 워크 플로에는 구문 분석, 컴파일 및 실행; 2) 실행 프로세스 중에 엔진은 인라인 캐시 및 숨겨진 클래스와 같은 동적 최적화를 수행합니다. 3) 모범 사례에는 글로벌 변수를 피하고 루프 최적화, Const 및 Lets 사용 및 과도한 폐쇄 사용을 피하는 것이 포함됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는
