资讯专栏INFORMATION COLUMN

nodejs练手爬虫+API测试

bigdevil_s / 1980人阅读

摘要:知乎日报代理首先感谢提供的分析使用详情请参考他提供的参数和地址代理转发的使用为前缀进入代理路由启动界面图像获取后为图像分辨率,接受任意的格式,为任意非负整数,返回值均相同返回值示例最新消息等具体参考提供的分析中的使用方式以及参数含义。

项目说明

这是一个基于express的node后端API服务,当时只是想抓取字幕组网站的下载资源,以备以后通过nas的方式去自动下载关注的美剧。不过后来慢慢扩展了几个API,以备以后写练手的webapp时,遇到没有数据调用的尴尬┑( ̄Д  ̄)┍

项目地址:nodejs练手爬虫+API测试

字幕组网站资源抓取原理:

首先发送登录请求到目标登录地址,登录成功后会获取到cookies

携带cookies访问收藏页面,通过cheerio抓取相应的关注信息

使用 es6 的 async 函数 并发执行抓取每一个关注的信息(如果当关注条目很多的时候,并行效率可能会比较低,之后考虑限制并行数量)

豆瓣电影API

只是做了一个简单的转发,并对返回的数据做了一个过滤,可以自定义过滤掉低于某个分数的电影

系统状态API

引入了node的 os 模块,获取一些基础的系统状态数据

cnode社区和知乎日报API

均为转发请求,目的是为了解决跨域访问的问题

cnode社区API本身支持跨域,本例只做测试用

特性:

使用了es6 的 async 函数 处理异步数据

集成node 8.0.0版本的docker 托管在云服务器方便访问

使用cors模块解决跨域问题,可以通过白名单的方式去配置允许跨域的ip。

在线访问地址

使用docker容器构建,托管在了daocloud.io的免费应用中

API地址:http://mrsix-api.daoapp.io

访问示例:get http://mrsix-api.daoapp.io/api/v1/zmz/hot24 获取24小时下载热门数据

遇到的问题

关于请求库 axios 在以form-data的形式发送post请求登录的的时候,遇到了问题,就是登录不上“字幕组”网站。(类似的问题 在cnode的兄弟也遇到了,不过我就没人家厉害了关于axios在node中的post使用)后来直接使用了 superagent感觉用起来很舒畅


以后增加的特性

[ ] 添加mongo数据库支持,通过对比检测当前更新了哪一集,并将更新的加入数据库

[ ] 添加其他资源抓取

[ ] 限制查询资源时的并发数量

[ ] 提供前端页面展示

[ ] 集成到docker中,通过Nginx处理端口转发

API说明
字幕组API GET /api/v1/zmz/hot24 获取24小时下载热门数据

返回值示例

{
  "success": true,
  "dsc": "热门列表",
  "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 参数:

account String 字幕组账户用户名

password String 字幕组账户用户名

返回值示例

{
  "success": true,
  "dsc": "关注list",
  "data": [
    {
      "title": "【美剧】《绝命律师》",
      "url": "http://www.zimuzu.tv/resource/33190",
      "id": "33190"
    },
    ...
  ]
}
POST /api/v1/zmz/fav/detail 获取关注列表下载资源

接收 post 参数:

account String 字幕组账户用户名

password String 字幕组账户用户名

返回值示例

{
  "success": true,
  "dsc": "关注资源下载列表",
  "data": [
    {
      "success": true
      "dsc": "美剧《绝命律师》第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": [
              ...
            ]
          ]
        }
      ]
    },
    ...
  ]
}
豆瓣电影-正在上映API GET /api/v1/movie/cur 获取正在上映的电影

接收 get 参数:

star 所需过滤的分数一下的电影(总分10分,默认为8分)

返回值示例
同豆瓣API

系统状态API GET /api/v1/sys 获取当前系统状态

返回值示例

{
  "success": true,
  "dsc": "系统状态",
  "data": {
    "arch": "x64",
    "cpu": [
      ...
    ],
    "totalmem": 8589934592,  # 内存总量
    "freemem": 741810176,    # 剩余内存
    "free_rate": "8.64",     # 内存剩余百分百
    "uptime": 47792          # 正常运行时间(单位s)
  }
}
cnode社区API代理

代理cnodejs社区的API转发,只是用来测试用的,因为cnode的API本身是支持跨域的。
使用详情请参考他提供的API参数和地址代理转发的API使用 /cnode/...为前缀进入代理路由

GET /cnode/topics 主题首页

接收 get 参数

page Number 页数

tab String 主题分类。目前有 ask share job good dev

limit Number 每一页的主题数量

mdrender String 当为 false 时,不渲染。默认为 true,渲染出现的所有 markdown 格式文本。

知乎日报API代理

首先感谢izzyleung提供的API分析
使用详情请参考他提供的API参数和地址代理转发的API使用 /ribao/...为前缀进入代理路由

GET /ribao/api/7/prefetch-launch-images/1080*1920 启动界面图像获取

prefetch-launch-images 后为图像分辨率,接受任意的 number*number 格式, number 为任意非负整数,返回值均相同
返回值示例

{
  "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项目,每当有新代码push之后触发自动构建命令

daocloud.io 控制台使用手动更新发布的方式(不支持dockerhub的自动发布)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26942.html

相关文章

  • nodeJS实现基于Promise爬虫 定时发送信息到指定邮件

    摘要:也就是说,我的篇文章的请求对应个实例,这些实例都请求完毕后,执行以下逻辑他的目的在于对每一个返回值这个返回值为单篇文章的内容,进行方法处理。 英国人Robert Pitt曾在Github上公布了他的爬虫脚本,导致任何人都可以容易地取得Google Plus的大量公开用户的ID信息。至今大概有2亿2千5百万用户ID遭曝光。 亮点在于,这是个nodejs脚本,非常短,包括注释只有71行。 ...

    xuweijian 评论0 收藏0
  • 基于nodejs编写小爬虫

    摘要:编写异步小爬虫在通过的课程初步了解的各大模块之后,不禁感慨于的强大,让我们这些前端小白也可以进行进阶的功能实现,同时发现自己也已经可以通过实现一些比较日常的小功能。 nodejs编写异步小爬虫 在通过learnyounode的课程初步了解nodejs的各大模块之后,不禁感慨于nodejs的强大,让我们这些前端小白也可以进行进阶的功能实现,同时发现自己也已经可以通过nodejs实现一些...

    3fuyu 评论0 收藏0
  • 全栈最后一公里 - Node.js 项目的线上服务器部署与发布

    摘要:没有耐心阅读的同学,可以直接前往学习全栈最后一公里。我下面会罗列一些,我自己录制过的一些项目,或者其他的我觉得可以按照这个路线继续深入学习的项目资源。 showImg(https://segmentfault.com/img/bVMlke?w=833&h=410); 本文技术软文,阅读需谨慎,长约 7000 字,通读需 5 分钟 大家好,我是 Scott,本文通过提供给大家学习的方法,...

    Nosee 评论0 收藏0
  • 小程序开发(一):使用scrapy爬虫采集数据

    摘要:用途广泛,可以用于数据挖掘监测和自动化测试。运行下,发现数据全部存到了数据库中。提供了一些接口来查看项目爬虫情况,以及执行或者停止执行爬虫。完成小程序所需要的所有接口的开发,以及使用定时任务执行爬虫脚本。 过完年回来,业余时间一直在独立开发一个小程序。主要数据是8000+个视频和10000+篇文章,并且数据会每天自动更新。 我会整理下整个开发过程中遇到的问题和一些细节问题,因为内容会比...

    mrli2016 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<