当前位置: 首页 > 后端技术 > Node.js

nodejs动手爬虫+API测试

时间:2023-04-03 16:26:05 Node.js

项目描述这是一个基于express的node后端API服务。当时只想抢字幕组网站的下载资源,方便以后通过nas自动下载关注的美剧。不过后来慢慢扩充了几个API,以防以后写webapp练手时数据调用的尴尬┑( ̄Д ̄)┍项目地址:nodejs爬虫动手+API测试字幕组网站资源抓取原理:首先向目标登录地址发送登录请求。登录成功后,您将获得cookies,通过cookies访问收藏的页面。使用cheerio抓取相应的注意力信息。使用es6的async函数并发执行,抓取每一个关注信息(如果关注项很多,并行效率可能比较低,后面考虑限制并行数)豆瓣电影API只是做一个简单的转发,对关注信息进行过滤返回的数据,可以自定义过滤掉评分低于一定分数的电影StatusAPI引入node的os模块获取一些基本的系统状态数据。cnode社区和知乎每日API都在转发请求。目的是为了解决跨域访问的问题。cnode社区API本身就支持跨域。本例仅供测试特点:使用es6的async功能处理异步数据集成节点8.0.0版本docker托管在云服务器上方便接入使用cors模块解决跨域问题,可以配置通过白名单允许跨域的ip。线上访问地址用docker容器搭建托管在daocloud.io免费应用API地址:http://mrsix-api.daoapp.io访问示例:gethttp://mrsix-api.daoapp.io/api/v1/zmz/hot24获取24小时下载热点数据遇到的问题关于请求库axios发送post请求以form-data形式登录时,遇到一个问题,就是不能't登录“字幕组”网站。(cnode兄弟也遇到过类似的问题,只是不知道在node中如何使用axiospost)后来直接用superagent,感觉用起来很舒服。后期添加功能[]添加mongo数据库支持,通过比较检测当前更新了哪一集,将更新的添加到数据库中[]添加其他资源抓取[]查询资源时限制并发数[]提供前端尾页展示[]通过Nginx集成docker并处理端口转发API描述副标题组APIGET/api/v1/zmz/hot24获取24小时下载热点数据返回值示例{"success":true,"dsc":"HotList","data":[{"title":"双峰","type":"美剧","url":"http://www.zimuzu.tv/resource/26514"},{"title":"绝望的律师","type":"美剧","url":"http://www.zimuzu.tv/resource/33190"},...]}POST/api/v1/zmz/fav获取关注列表和接收post参数:accountString字幕组账号用户名passwordString字幕组账号用户名返回值示例{"success":true,"dsc":"followlist","data":[{"title":"【美剧】《绝命律师》","url":"http://www.zimuzu.tv/resource/33190","id":"33190"},...]}POST/api/v1/zmz/fav/detail获取关注列表下载资源接收post参数:accountString字幕组账号用户名passwordString字幕组账号用户名返回值示例{"success":true,"dsc":"关注资源下载列表","data":[{"success":true"dsc":"美剧《绝命律师》No.3个剧季资源下载列表","data":[{"source_type":"HR-HDTV","source_urls":["season":"1","episode":"1","title":"Better.Call.Saul.S01E01.中英文字幕.BD-HR.AAC.1024x576.x264.mp4","load_arr":[...]]}]},...]}豆瓣电影-正在播放APIGET/api/v1/movie/cur获取当前正在播放的电影接收get参数:star评分低于要求过滤条件的电影(总分10分,默认8分),返回值示例同上豆瓣API系统状态APIGET/api/v1/sys获取当前系统状态返回值示例{"success":true,"dsc":"systemstatus","data":{"arch":"x64","cpu":[...],"totalmem":8589934592,#总内存"freemem":741810176,#剩余内存"free_rate":"8.64",#剩余内存百分比"uptime":47792#uptime(units)}}cnode社区API代理代理cnodejs社区的API转发仅用于测试,因为cnode的API本身支持跨域使用。具体可以参考他提供的API参数和地址代理转发API/cnode/...前缀输入代理路由GET/cnode/topics主页接收get参数pageNumber页码tabStringtopic分类。目前有asksharejobgooddevlimitNumber每页主题数mdrenderString为false时不渲染。默认为true,呈现出现的所有降价格式文本。知乎每日API代理首先感谢izzyleung提供的API分析和使用细节,请参考他提供的API参数和地址。agent转发的API以/ribao/...为前缀进入agent路由GET/ribao/api/7/prefetch-launch-images/1080*1920prefetch后获取启动界面的图片分辨率-launch-images,接受任意数字*数字格式,数字为任意非负整数,返回值相同返回值示例{"creatives":[{"url":"https://pic1.zhimg.com/v2-cf690e166adee2d77ebb3450d4ddc424.jpg","start_time":1496932908,"impression_tracks":["https://sugar.zhihu.com/track?ai=4704&ut=&tu=&vs=2&ts=1496932908&si=ec82667293bd47cc88261ab0653cf64f&lu=0&hn=ad-engine.ad-engine.05d757af&at=impression&pf=PC&az=11&sg=4d27dde3d4db55a399ed6ecfc333eedb"],"type":0,"id":"4704"}]}GET/ribao/api/4/news/latest最新消息等.详细参考izzyleung提供的API分析中的使用方法和参数含义。ps:可以添加meta标签添加docker部分使用dockerHub的自动构建功能关联GitHub项目,只要有就会触发自动构建命令daocloud是新的代码推送.io控制台使用手动更新发布(不支持dockerhub自动发布)