
Node.js是一个基于JavaScript的运行环境,可以用于开发各种类型的应用程序。使用Node.js获取网页标题的步骤如下:
除使用Node.js,您也可以通过调用第三方API来获取网页标题。一个常见的选择是使用 API Ninjas的网页标题API 。以下是使用该API的步骤:
通过上述步骤,您就可以使用Node.js或API来获取网页标题。无论您选择哪种方式,这些技术都可以帮助您在开发过程中轻松地获取所需的信息。【快速上手】用Node.js做简单的图片爬取
介绍爬虫的主要目的是收集互联网上公开的一些特定数据。 利用这些数据我们可以能进行分析一些趋势对比,或者训练模型做深度学习等等。 本期我们就将介绍一个专门用于网络抓取的包——node-crawler,并且我们将用它完成一个简单的爬虫案例来爬取网页上图片并下载到本地。
正文node-crawler是一个轻量级的爬虫工具,兼顾了高效与便利性,支持分布式爬虫系统,支持硬编码,支持http前级代理。 而且,它完全是由nodejs写成,天生支持非阻塞异步IO,为爬虫的流水线作业机制提供了极大便利。 同时支持对DOM的快速选择(可以使用jQuery语法),对于抓取网页的特定部分的任务可以说是杀手级功能,无需再手写正则表达式,提高爬虫开发效率。
安装引入我们先新建一个项目,在里面创建作为入口文件。
然后进行爬虫库?node-crawler的安装。
#PNPMpnpmaddcrawler#NPMnpmi-Scrawler#Yarnyarnaddcrawler然后用过require引入进去。
//=require(crawler);创建实例//=newCrawler({timeout,jQuery:true,})functiongetImages(uri){({uri,callback:(err,res,done)=>{if(err)throwerr;}})}从现在我们将开始写一个拿到html页面的图片的方法,crawler实例化后,在其队列中主要是为了写入链接和回调方法。 在每个请求处理完毕后将调这个回调函数。
这里还要说明一下,Crawler?使用了request库,所以Crawler可供配置的参数列表是request库的参数的超集,即request库中所有的配置在Crawler中均适用。
元素捕获刚才或许你也看到了jQuery这个参数,你猜的没错,它可以使用?jQuery?的语法去捕获DOM元素的。
//=[]functiongetImages(uri){({uri,callback:(err,res,done)=>{if(err)throwerr;let$=res.$;try{let$imgs=$(img);($imgs)(index=>{letimg=$imgs[index];const{type,name,attribs={}}=img;letsrc=||;if(type===tag&&src&&!(src)){letfileSrc=(http)?src:`https:${src}`letfileName=(/)[(/)-1]downloadFile(fileSrc,fileName)//下载图片的方法(src)}});}catch(e){(e);done()}done();}})}可以看到刚才通过$来完成对请求中img标签的捕获。 然后我们下面的逻辑去处理补全图片的链接和剥离出名字为了后面可以保存取名用。 这里还定义了一个数组,它的目的是保存已经捕获到的图片地址,如果下次捕获发现同一个图片地址,那么就不再重复处理下载了。
以下是掘金首页html用$(img)捕获到的信息打印:
下载图片下载之前我们还要安装一个nodejs包——axios,是的你没看错,axios不仅提供给前端,它也可以给后端去使用。 但是因为下载图片要把它处理成数据流,所以把responseType设置成stream。 然后才可以用pipe方法保存数据流文件。
const{default:axios}=require(axios);constfs=require(fs);asyncfunctiondownloadFile(uri,name){letdir=./imgsif(!(dir)){(dir)}letfilePath=`${dir}/${name}`letres=awaitaxios({url:uri,responseType:stream})((filePath))}因为可能图片很多,所以要统一放在一个文件夹下,就要判断有没有这个文件夹如果没有就创建一个。 然后通过createWriteStream方法来把获取到的数据流以文件的形式保存到文件夹里面。
然后我们可以尝试一下,比如我们捕获用一下掘金首页html下的图片:
//(执行后发现就可以发现已经捕获到静态html里面的所有图片了。 结语到了最后,你也可以看到,此代码可能不适用于SPA(单页面应用)。 由于单页应用程序中只有一个HTML文件,并且网页上的所有内容都是动态呈现的,但是万变不离其宗,不管怎样,你可以直接处理其数据请求,来收集到想要的信息也未尝不可。
还有一点要说的是,很多小伙伴处理下载图片的请求用到了,当然这样可以的,甚至代码量更少,但是,我想说的是这个库在2020年的时候就已经被弃用了,最好换一个一直在更新维护的库比较好。
原文:Nodejs中使用request
在中,处理HTTP请求是一项基础且重要的任务。 本文将介绍如何使用request库,包括异步和同步请求的实现,以及如何在环境中构建和管理HTTP服务。 首先,我们来谈谈异步请求。 使用request库,你需要进行以下步骤:1. 安装request模块:`npm install request`2. 对于GET和POST请求,异步request的用法有所不同。 例如,发送GET请求:`(callback)`,而POST请求则需要传递一个JSON对象:`({json: {key: value}}, callback)`。 同步request的实现更为直接,如sync-request,但请注意,它可能不是最佳实践,因为它会阻塞事件循环。 同步请求的安装和使用方法与异步类似,但返回的是完整的response对象。 在中,处理HTTP请求涉及到Request(req)和Response(res)对象。 你可以通过`http`模块创建一个服务器,监听本地IP(127.0.0.1)或localhost。 定义路由时,需要确定方法(GET或POST)、URL规则以及输入和输出的格式。 例如,通过``和``获取请求方法和URL,然后进行相应的处理。 querystring在HTTP请求中扮演着传递参数的角色,它可以帮助解析URL中的查询字符串。 虽然hash(#后面的内容)不能被服务器获取,但可以用于实现动态网页。 数据的结构化和非结构化在编程中至关重要,尽量使用结构化的数据便于处理。 返回数据时,利用`()`设置状态码、内容类型和body。 例如,返回JSON数据时,`((data))`。 对于HTML数据,需要设置`Content-type`为`text/html`。 获取Request Body时,由于数据通常是通过流传输的,你需要在浏览器接收完整内容后再进行处理。 流可以用于处理视频或大文件,浏览器会自动接收并分段处理。 总的来说,中的HTTP请求处理涉及模块的安装、请求类型的区别、路由设置、参数解析、响应数据和流处理等环节。 通过这些步骤,你可以有效地管理你的HTTP服务。
使用 Node.js 开发一个简单的 web 服务器响应 HTTP get 请求
在 中,构建一个基础的 HTTP 服务器以响应 GET 请求是一项基本且实用的技能。 以下是如何实现的简要步骤:首先,确保你已经安装了 ,可以通过运行 node -v 检查。 如果没有,从 官网下载并安装。 其次,利用 的内置http模块,我们可以创建并启动服务器。 关键代码如下,它监听 8080 端口,针对 /ping 的 GET 请求,解析并返回查询参数作为 JSON:为了测试,将这段代码保存为 ,然后在命令行中运行。 你可以使用浏览器或Postman发送 GET 请求到¶m2=value2,服务器将返回解析后的 JSON 数据。 尽管这个基础示例展示了基础功能,但在实际应用中,你还需要考虑扩展,比如错误处理、日志记录和安全性。 这时,可以引入像这样的框架来简化路由和中间件管理,提升项目的效率和可维护性。