node中如何借助第三方开源库实现网站爬取功能
发表于:2025-02-09 作者:千家信息网编辑
千家信息网最后更新 2025年02月09日,这篇文章主要介绍node中如何借助第三方开源库实现网站爬取功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!nodejs实现网站爬取功能第三方库介绍request 对网络请求的
千家信息网最后更新 2025年02月09日node中如何借助第三方开源库实现网站爬取功能
这篇文章主要介绍node中如何借助第三方开源库实现网站爬取功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
nodejs实现网站爬取功能
第三方库介绍
request 对网络请求的封装
cheerio node 版本的 jQuery
mkdirp 创建多层的文件夹目录
实现思路
通过
request
获取指定 url 内容通过
cheerio
找到页面中跳转的路径(去重)通过
mkdirp
创建目录通过
fs
创建文件,将读取的内容写入拿到没有访问的路径重复以上执行步骤
代码实现
const fs = require("fs");const path = require("path");const request = require("request");const cheerio = require("cheerio");const mkdirp = require("mkdirp");// 定义入口urlconst homeUrl = "https://www.baidu.com";// 定义set存储已经访问过的路径,避免重复访问const set = new Set([homeUrl]);function grab(url) { // 校验url规范性 if (!url) return; // 去空格 url = url.trim(); // 自动补全url路径 if (url.endsWith("/")) { url += "index.html"; } const chunks = []; // url可能存在一些符号或者中文,可以通过encodeURI编码 request(encodeURI(url)) .on("error", (e) => { // 打印错误信息 console.log(e); }) .on("data", (chunk) => { // 接收响应内容 chunks.push(chunk); }) .on("end", () => { // 将相应内容转换成文本 const html = Buffer.concat(chunks).toString(); // 没有获取到内容 if (!html) return; // 解析url let { host, origin, pathname } = new URL(url); pathname = decodeURI(pathname); // 通过cheerio解析html const $ = cheerio.load(html); // 将路径作为目录 const dir = path.dirname(pathname); // 创建目录 mkdirp.sync(path.join(__dirname, dir)); // 往文件写入内容 fs.writeFile(path.join(__dirname, pathname), html, "utf-8", (err) => { // 打印错误信息 if (err) { console.log(err); return; } console.log(`[${url}]保存成功`); }); // 获取到页面中所有a元素 const aTags = $("a"); Array.from(aTags).forEach((aTag) => { // 获取到a标签中的路径 const href = $(aTag).attr("href"); // 此处可以校验href的合法或者控制爬去的网站范围,比如必须都是某个域名下的 // 排除空标签 if (!href) return; // 排除锚点连接 if (href.startsWith("#")) return; if (href.startsWith("mailto:")) return; // 如果不想要保存图片可以过滤掉 // if (/\.(jpg|jpeg|png|gif|bit)$/.test(href)) return; // href必须是入口url域名 let reg = new RegExp(`^https?:\/\/${host}`); if (/^https?:\/\//.test(href) && !reg.test(href)) return; // 可以根据情况增加更多逻辑 let newUrl = ""; if (/^https?:\/\//.test(href)) { // 处理绝对路径 newUrl = href; } else { // 处理相对路径 newUrl = origin + path.join(dir, href); } // 判断是否访问过 if (set.has(newUrl)) return; if (newUrl.endsWith("/") && set.has(newUrl + "index.html")) return; if (newUrl.endsWith("/")) newUrl += "index.html"; set.add(newUrl); grab(newUrl); }); });}// 开始抓取grab(homeUrl);
以上是"node中如何借助第三方开源库实现网站爬取功能"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
内容
路径
网站
目录
功能
第三方
文件
信息
入口
域名
更多
标签
篇文章
错误
页面
处理
合法
成功
代码
价值
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全法 违法 档案
web怎么连接数据库
web认证服务器
我的世界服务器指令现实手中物品
河南省服务器托管公司云空间
rup与基于架构的软件开发
班会网络安全心得
好友克隆服务器繁忙
如何批量修改数据库时间精度
神农架林区网络安全技术
想考网络技术证怎么考
网络安全监控方案内容
计算机软件开发功能
班列网络技术股份有限公司
服务器与电脑进行大文件传输
radius服务器 ad服务器
卫星网络安全路由
上网服务器是什么意思
如何低成本制作一个数据库网站
芯片驱动软件开发
宜宾网络安全事故
游戏资源服务器怎么搭建
有关政府网络安全的股票
应用系统如何将数据写入数据库
爆炸服务器
玩游戏服务器安全验证失败
市网络安全工作报告
软件开发选哪家
数字转换成大写数据库
漳州宽迅网络技术公司