聊聊node中怎么借助第三方开源库实现网站爬取功能

本篇文章给大家介绍一下node中借助第三方开源库轻松实现网站爬取功能的方法,希望对大家有所帮助! nodejs实现网站爬取功能 第三方库介绍 request 对网络请求的封装 ch…

本篇文章给大家介绍一下node中借助第三方开源库轻松实现网站爬取功能的方法,希望对大家有所帮助!

聊聊node中怎么借助第三方开源库实现网站爬取功能

nodejs实现网站爬取功能

第三方库介绍

request 对网络请求的封装

cheerio node 版本的 jQuery

mkdirp 创建多层的文件夹目录

实现思路

通过request获取指定 url 内容

通过cheerio找到页面中跳转的路径(去重)

通过mkdirp创建目录

通过fs创建文件,将读取的内容写入

拿到没有访问的路径重复以上执行步骤

代码实现

constfs=require("fs");constpath=require("path");constrequest=require("request");constcheerio=require("cheerio");constmkdirp=require("mkdirp");//定义入口urlconsthomeUrl="https://www.baidu.com";//定义set存储已经访问过的路径,避免重复访问constset=newSet([homeUrl]);functiongrab(url){//校验url规范性if(!url)return;//去空格url=url.trim();//自动补全url路径if(url.endsWith("/")){url+="index.html";}constchunks=[];//url可能存在一些符号或者中文,可以通过encodeURI编码request(encodeURI(url)).on("error",(e)=>{//打印错误信息console.log(e);}).on("data",(chunk)=>{//接收响应内容chunks.push(chunk);}).on("end",()=>{//将相应内容转换成文本consthtml=Buffer.concat(chunks).toString();//没有获取到内容if(!html)return;//解析urllet{host,origin,pathname}=newURL(url);pathname=decodeURI(pathname);//通过cheerio解析htmlconst$=cheerio.load(html);//将路径作为目录constdir=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元素constaTags=$("a");Array.from(aTags).forEach((aTag)=>{//获取到a标签中的路径consthref=$(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域名letreg=newRegExp(`^https?:\/\/${host}`);if(/^https?:\/\//.test(href)&&!reg.test(href))return;//可以根据情况增加更多逻辑letnewUrl="";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);

总结

简单的网页爬虫就完成了,可以把homeUrl改成自己想要爬取的网站试试。

产品猿社区致力收录更多优质的商业产品,给服务商以及软件采购客户提供更多优质的软件产品,帮助开发者变现来实现多方共赢;

日常运营的过程中我们难免会遇到各种版权纠纷等问题,如果您在社区内发现有您的产品未经您授权而被用户提供下载或使用,您可按照我们投诉流程处理,点我投诉

本文来自用户发布投稿,不代表产品猿立场 ;若对此文有疑问或内容有严重错误,可联系平台客服反馈;

部分产品是用户投稿,可能本文没有提供官方下下载地址或教程,若您看到的内容没有下载入口,您可以在我们产品园商城搜索看开发者是否有发布商品;若您是开发者,也诚邀您入驻商城平台发布的产品,地址:点我进入

如若转载,请注明出处:https://www.chanpinyuan.cn/39606.html;
(0)
上一篇 2023年3月21日
下一篇 2023年3月21日

相关推荐

发表回复

登录后才能评论
分享本页
返回顶部