크롤러를 작성하기 위해 노드를 사용하기로 선택한 이유는 무엇입니까? Cherio 라이브러리는 jQuery 구문과 완벽하게 호환되기 때문입니다. 익숙하다면
종속성 선택
-
cheerio: Node .js jQuery 버전
http: HTTP 서버와 간단한 HTTP 클라이언트를 캡슐화합니다
iconv-lite: gb2312 웹 페이지 크롤링 시 문자 깨짐 문제 해결
초기 구현
웹 사이트 콘텐츠를 크롤링하려면 먼저 웹사이트 기본 구조 살펴보기
Movie Paradise를 대상 웹사이트로 선택하고 최신 영화 다운로드 링크를 모두 크롤링하려고 했습니다.
분석 페이지
페이지 구조는 다음과 같습니다. :
각 영화의 제목이 <a href="http://www.php.cn/wiki/164.html">class<code><a href="http://www.php.cn/wiki/164.html" target="_blank">class</a>
ulink
의 a
태그 아래에서 위로 이동하면 가장 바깥쪽 상자 class
가 co_content8
인 것을 확인할 수 있습니다. , 작업을 시작하면
페이지 영화 제목을 얻을 수 있습니다
먼저 종속성을 소개하고 크롤링할 URL을 설정합니다
var cheerio = require('cheerio'); var http = require('http'); var iconv = require('iconv-lite'); var url = 'http://www.ygdy8.net/html/gndy/dyzz/index.html';
핵심 코드index.js
http.get(url, function(sres) { var chunks = []; sres.on('data', function(chunk) { chunks.push(chunk); }); // chunks里面存储着网页的 html 内容,将它zhuan ma传给 cheerio.load 之后 // 就可以得到一个实现了 jQuery 接口的变量,将它命名为 `$` // 剩下就都是 jQuery 的内容了 sres.on('end', function() { var titles = []; //由于咱们发现此网页的编码格式为gb2312,所以需要对其进行转码,否则乱码 //依据:“<meta>” var html = iconv.decode(Buffer.concat(chunks), 'gb2312'); var $ = cheerio.load(html, {decodeEntities: false}); $('.co_content8 .ulink').each(function (idx, element) { var $element = $(element); titles.push({ title: $element.text() }) }) console.log(titles); }); });
실행node index
결과는 다음과 같습니다.
영화 제목을 성공적으로 얻었습니다. 여러 페이지의 제목을 얻으려면 불가능합니다. URL을 하나씩 변경합니다. 물론 방법도 있습니다. 계속 읽어보세요!
여러 페이지로 구성된 영화 제목 가져오기
이전 코드를 함수로 캡슐화하고 재귀적으로실행하면 완료됩니다
핵심코드index.js
var index = 1; //页面数控制 var url = 'http://www.ygdy8.net/html/gndy/dyzz/list_23_'; var titles = []; //用于保存title function getTitle(url, i) { console.log("正在获取第" + i + "页的内容"); http.get(url + i + '.html', function(sres) { var chunks = []; sres.on('data', function(chunk) { chunks.push(chunk); }); sres.on('end', function() { var html = iconv.decode(Buffer.concat(chunks), 'gb2312'); var $ = cheerio.load(html, {decodeEntities: false}); $('.co_content8 .ulink').each(function (idx, element) { var $element = $(element); titles.push({ title: $element.text() }) }) if(i <p>결과는 다음과 같습니다<br><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/013/79a1edcfe9244c5fb6f23f007f455aaf-2.png?x-oss-process=image/resize,p_40" class="lazy" style="max-width:90%" style="max-width:90%" title="Node.js를 사용하여 간단한 크롤러를 구현하는 방법" alt="Node.js를 사용하여 간단한 크롤러를 구현하는 방법"></p><h4 id="영화-다운로드-링크-받기">영화 다운로드 링크 받기</h4><p>수동인 경우, 한 번의 작업이 필요합니다. 클릭하여 입력하세요. 다운로드 주소는 영화 세부정보 페이지에서만 찾을 수 있습니다<br>그럼 노드를 통해 어떻게 구현합니까</p><p>먼저 루틴을 분석해 보겠습니다<a href="http://www.php.cn/code/7955.html" target="_blank">페이지 레이아웃</a> <br><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/013/45e6e69669b80c60f0e7eabd78b3a018-3.png?x-oss-process=image/resize,p_40" class="lazy" style="max-width:90%" style="max-width:90%" title="Node.js를 사용하여 간단한 크롤러를 구현하는 방법" alt="Node.js를 사용하여 간단한 크롤러를 구현하는 방법"></p><p>다운로드 링크를 정확하게 찾으려면 먼저 <code>id</code>이 <code>Zoom</code>인 p를 찾아야 합니다. 다운로드 링크는 <code>p</code> 태그에 있습니다. 🎜> 이 <code>tr</code> 아래에 있습니다. <code>a</code></p>그런 다음 <p>함수를 정의<a href="http://www.php.cn/code/8119.html" target="_blank">하여 다운로드 링크를 가져옵니다</a></p>getBtLink()<p></p><pre class="brush:php;toolbar:false">function getBtLink(urls, n) { //urls里面包含着所有详情页的地址 console.log("正在获取第" + n + "个url的内容"); http.get('http://www.ygdy8.net' + urls[n].title, function(sres) { var chunks = []; sres.on('data', function(chunk) { chunks.push(chunk); }); sres.on('end', function() { var html = iconv.decode(Buffer.concat(chunks), 'gb2312'); //进行转码 var $ = cheerio.load(html, {decodeEntities: false}); $('#Zoom td').children('a').each(function (idx, element) { var $element = $(element); btLink.push({ bt: $element.attr('href') }) }) if(n 다시 실행<p><code>node index</code><br> <img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/013/2816c9cbd03b1466c255e54c10156e14-4.png?x-oss-process=image/resize,p_40" class="lazy" style="max-width:90%" style="max-width:90%" title="Node.js를 사용하여 간단한 크롤러를 구현하는 방법" alt="Node.js를 사용하여 간단한 크롤러를 구현하는 방법"><br><img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/013/8eb570e10f1a4e755ebffd92bd150760-5.png?x-oss-process=image/resize,p_40" class="lazy" style="max-width:90%" style="max-width:90%" title="Node.js를 사용하여 간단한 크롤러를 구현하는 방법" alt="Node.js를 사용하여 간단한 크롤러를 구현하는 방법"></p>이렇게 3페이지에 걸쳐 모든 영화의 다운로드 링크를 얻었습니다. 매우 간단하지 않나요? <p></p>데이터 저장<h2></h2>물론 데이터는 크롤링한 후 저장해야 합니다. 여기서는 <p>MongoDB<a href="http://www.php.cn/wiki/1523.html" target="_blank">를 선택하여 저장</a> </p>데이터 저장 기능<p><code>save()</code></p><pre class="brush:php;toolbar:false">function save() { var MongoClient = require('mongodb').MongoClient; //导入依赖 MongoClient.connect(mongo_url, function (err, db) { if (err) { console.error(err); return; } else { console.log("成功连接数据库"); var collection = db.collection('node-reptitle'); collection.insertMany(btLink, function (err,result) { //插入数据 if (err) { console.error(err); } else { console.log("保存数据成功"); } }) db.close(); } }); }여기 작업은 매우 간단합니다. 몽구스를 사용할 필요가 없습니다
다시 실행node index
위 내용은 Node.js를 사용하여 간단한 크롤러를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Vercel是什么?本篇文章带大家了解一下Vercel,并介绍一下在Vercel中部署 Node 服务的方法,希望对大家有所帮助!

gm是基于node.js的图片处理插件,它封装了图片处理工具GraphicsMagick(GM)和ImageMagick(IM),可使用spawn的方式调用。gm插件不是node默认安装的,需执行“npm install gm -S”进行安装才可使用。

如何用pkg打包nodejs可执行文件?下面本篇文章给大家介绍一下使用pkg将Node.js项目打包为可执行文件的方法,希望对大家有所帮助!

本篇文章带大家详解package.json和package-lock.json文件,希望对大家有所帮助!

本篇文章给大家分享一个Nodejs web框架:Fastify,简单介绍一下Fastify支持的特性、Fastify支持的插件以及Fastify的使用方法,希望对大家有所帮助!

node怎么爬取数据?下面本篇文章给大家分享一个node爬虫实例,聊聊利用node抓取小说章节的方法,希望对大家有所帮助!

本篇文章给大家分享一个Node实战,介绍一下使用Node.js和adb怎么开发一个手机备份小工具,希望对大家有所帮助!

先介绍node.js的安装,再介绍使用node.js构建一个简单的web服务器,最后通过一个简单的示例,演示网页与服务器之间的数据交互的实现。


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

드림위버 CS6
시각적 웹 개발 도구

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

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.
