雅荷心语博客
雅荷心语
心之所向便是光
  • 首页
  • 前端之旅
  • 后端之路
  • 软件工具
  • 心灵鸡汤
  • 心路历程
  • 视频资料
  • 关于我们
    • 关于我
    • 关于我
  • 微信平台
    • 业务合作
  • 首页
  • 前端之旅
  • 后端之路
  • 软件工具
  • 心灵鸡汤
  • 心路历程
  • 视频资料
  • 关于我们
    • 关于我
    • 关于我
  • 微信平台
    • 业务合作
  • 关注本站
    • 微信
    • 微博
    • 腾讯微博
    • Twitter
    • Facebook
    • RSS订阅
Hi, 请登录     我要注册     找回密码

使用 nodeJs 写个简单的小小爬虫

2017-10-30 分类:前端之旅 / 后端之路 阅读(2657) 评论(0)

最近开始想好好看看nodeJs, 写点东西练习一下!

首先了解一下使用了那些东西!

1, express ,npm地址 https://www.npmjs.com/package/express

这个主要是用来启动一个本地服务器,

2, supervisor , npm地址 https://www.npmjs.com/package/supervisor

主要用来负责重启node进程

3, request , npm地址: https://www.npmjs.com/package/request

这个模块主要用来 发起http请求,

4. cheerio, npm地址: https://www.npmjs.com/package/cheerio

这个模块主要用来提供像jquery一样来选择html元素的方法,

代码很简单,会写javascript的看一眼就能懂!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var express = require('express');
var app = express();
var request = require('request');
const cheerio = require('cheerio');
const fs = require('fs');
 
app.get('/', function (req, res) {
    request('https://gitee.com/explore/starred?lang=PHP', function (error, response, body) {
        console.log(response.statusCode);
        const $ = cheerio.load(body);
        let arr = [];
        $('#git-discover-list').find('.item').each(function (k,v) {
            let starFork = $(v).find('.watch-star-fork');
            let json = {
                name:$(v).find('.project-namespace-path').text(),
                desc:$(v).find('.project-desc').text(),
                watch:starFork.find('a').eq(0).find('span').text(),
                star:starFork.find('a').eq(1).find('span').text(),
                fork:starFork.find('a').eq(2).find('span').text(),
            };
            arr.push(json)
        });
        let jsonstr = JSON.stringify(arr,null,2);
        console.dir(arr);
        fs.appendFile('list.json', jsonstr, (err) => {
            if (err) throw err;
        });
        res.send(jsonstr)
    });
})
app.listen(3000);

主要启动了一个服务监听 3000 端口,

然后 请求 码云 的php项目列表,

请求完成,获取所需的数据,写入到数组,

最后一步,把数组写入到本地的json文件里!

最终得到结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
[
  {
    "name": "暗夜在火星/PhalApi",
    "desc": "简称π框架,一个轻量级PHP开源接口框架,专注于接口服务开发,支持HTTP/SOAP/RPC协议,拥有自动生成的在线文档、多种开发语言的客户端SDK包以及可重用的扩展类库,可用于快速搭建微服务、RESTful接口或Web Services。",
    "watch": "438",
    "star": "1.1k",
    "fork": "365"
  },
  {
    "name": "IBOS开源OA协同办公管理/IBOS",
    "desc": "基于Yii和bootstrap的开源OA/协同办公平台,连接全平台覆盖的酷办公客户端(Win,IOS,Android,Mac,Linux),支撑您的企业管理二次开发--作为国内首家开源OA,有的不只是颜值",
    "watch": "439",
    "star": "910",
    "fork": "550"
  },
  {
    "name": "白俊遥/thinkphp-bjyadmin",
    "desc": "thinkphp整合Auth权限管理、支付宝、微信支付、阿里oss、友盟推送、融云即时通讯、云通讯短信、Email、Excel、PDF等等",
    "watch": "390",
    "star": "822",
    "fork": "330"
  },
  {
    "name": "einsqing/wemall",
    "desc": "wemall微信商城云平台 快速创建您的微信商城",
    "watch": "388",
    "star": "763",
    "fork": "425"
  },
  {
    "name": "ycchen/iWshop",
    "desc": "微信开源商城,基于高性能框架Phalcon,自主开发微信Sdk, 基于腾讯Weui开发店铺页面。",
    "watch": "366",
    "star": "742",
    "fork": "355"
  },
  {
    "name": "雾渺/KODExplorer",
    "desc": "KodExplorer是一款快捷高效的私有云和在线文档管理系统,为个人网站、企业私有云部署、网络存储、在线文档管理、在线办公等提供安全可控,简便易用、可高度定制的私有云产品。采用windows风格界面、操作习惯,无需适应即可快速上手,支持几百种常用文件格式的在线预览,可扩展易定制。GPL v3开源协议.",
    "watch": "317",
    "star": "741",
    "fork": "275"
  },
  {
    "name": "CRM8000/PSI",
    "desc": "PSI是一款基于SaaS模式(Software as a Service软件即服务)的企业管理软件。PSI以商贸企业的核心业务:采购、销售、库存(进销存)为切入点,最终目标是行业化的ERP解决方案。",
    "watch": "342",
    "star": "739",
    "fork": "344"
  },
  {
    "name": "奕潇/OpenCenter",
    "desc": "通用性强的开源用户及后台管理系统,非常适合全新系统的开发。\n基于ThinkPHP开发,遵循与ThinkPHP相同的开源协议。\n2016年最新更新,加入了新的功能。修复了以前一些老的Bug。\n欢迎关注我的另一个项目:http://git.oschina.net/yhtt2020/OpenSNS-V2\n基于Apache2.0 开源通用 用户及后台管理框架,提供了注册登录、头像裁剪、单点登录、权限管理、扩展资料管理、等级头衔、自定义积分管理、用户行为日志机制、模块装卸、插件机制,提供建议的安装程序。...",
    "watch": "356",
    "star": "726",
    "fork": "347"
  },
  {
    "name": "rainfer/YFCMF",
    "desc": "YFCMF是采用ThinkPHP5.0.10+国外ACE1.40的UI模板的后台内容管理框架。演示网站:http://www.rainfer.cn/admin.php  用户名:demo密码:123456  交流:http://www.yfcmf.net QQ群:213321650",
    "watch": "262",
    "star": "691",
    "fork": "230"
  },
  {
    "name": "Karson/fastadmin",
    "desc": "基于ThinkPHP5和Bootstrap的极速后台开发框架",
    "watch": "271",
    "star": "681",
    "fork": "281"
  },
  {
    "name": "thinkcmf/ThinkCMFX",
    "desc": "ThinkCMF 是一款高速PHP内容管理框架,扩展性良好可高程度的提高开发者的开发效率,节省开发成本。",
    "watch": "282",
    "star": "654",
    "fork": "336"
  },
  {
    "name": "Lane/LaneWeChat",
    "desc": "微信PHP快速开发框架。封装微信公众号接口,简单调用,快速上线。详尽的文档和示例,让开发者快速上手。",
    "watch": "321",
    "star": "606",
    "fork": "263"
  },
  {
    "name": "风一样的世界/laravel5_backend",
    "desc": "基于laravel 5 框架的后台基础系统。包括登录验证、用户管理,修改密码,用户权限,用户组权限,功能管理,系统日志,文件上传、工作流。目前还附加了简单的blog功能。可以快速基于此系统进行laravel5的快速开发,免去每次都写一次后台基础的痛苦。",
    "watch": "255",
    "star": "582",
    "fork": "276"
  },
  {
    "name": "小微OA/smeoa",
    "desc": "基于ThinkPHP开发的PHP开源OA办公系统\n\n新版地址:https://git.oschina.net/smeoa/xiaowei",
    "watch": "340",
    "star": "582",
    "fork": "304"
  },
  {
    "name": "Discuz!/DiscuzX",
    "desc": "Discuz! X 官方 Git/SVN SC_UTF8 版本,最新版本 X3.4 R20171001+",
    "watch": "236",
    "star": "581",
    "fork": "341"
  },
  {
    "name": "ApiAdmin/ApiAdmin",
    "desc": "基于ThinkPHP V3.2开发的面向API的后台管理系统!",
    "watch": "206",
    "star": "538",
    "fork": "192"
  },
  {
    "name": "微擎团队/pros",
    "desc": "微擎是一款免费开源的微信公众号管理系统,基于目前最流行的WEB2.0架构(php+mysql),支持在线升级和安装模块及模板,拥有良好的开发框架、成熟稳定的技术解决方案、活跃的第三方开发者及开发团队,依托微擎开放的生态系统,提供丰富的扩展功能。除了Master外其它分支皆为不稳定的开发版。欢迎大家Fork",
    "watch": "213",
    "star": "492",
    "fork": "224"
  },
  {
    "name": "easysoft/zentaopms",
    "desc": "禅道是第一款国产的开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款专业的研发项目管理软件,完整地覆盖了项目管理的核心流程。注重实效,合软件架构合理,操作简洁高效,扩展灵活,多语言支持,多风格支持,搜索功能,统计功能——这一切,您通过禅道,都可以拥有!",
    "watch": "211",
    "star": "483",
    "fork": "228"
  },
  {
    "name": "祺爸PiscDong/sns_PHP",
    "desc": "网易微博、百度、Google、微软、Instagram、Facebook、360、GitHub、淘宝等平台的账号登录及api操作,使用oauth 2.0。官方提供的sdk都太过庞大,这是我自己简化的,提供简单的账号登录、获取个人信息、发布微博等功能,如果需要其他功能可以根据官方的api文档自行添加。\n",
    "watch": "202",
    "star": "474",
    "fork": "228"
  },
  {
    "name": "大愚/payment",
    "desc": "Payment是一个php版本的支付聚合第三方sdk,集成了微信支付、支付宝支付、招商一网通支付。提供统一的调用接口,方便快速接入各种支付、查询、退款、转账能力。",
    "watch": "239",
    "star": "472",
    "fork": "133"
  },
  {
    "name": "ThinkPHP/thinkphp",
    "desc": "开源PHP框架",
    "watch": "237",
    "star": "464",
    "fork": "203"
  },
  {
    "name": "JAE/QueryList",
    "desc": "QueryList是一个基于phpQuery的简洁、优雅的PHP采集工具,具有高扩展性。",
    "watch": "186",
    "star": "444",
    "fork": "154"
  },
  {
    "name": "jry/lyadmin",
    "desc": "lyadmin(lysite分支全新发布)是一套轻量级通用后台,采用ThinkPHP+Bootstrap3制作,内置系统设置、上传管理、权限管理、模块管理、插件管理等功能,独有的Builder页面自动生成技术节省50%开发成本,先进的模块化开发的支持让开发成本一降再降,致力于为个人和中小型企业打造全方位的PHP企业级开发解决方案。另外提供整套企业开发解决方案,集PC、手机、微信、App、小程序五端于一体,更有用户中心模块、门户模块、钱包支付中心模块、商城模块、OAuth2统一登陆、内部Git模块、Do...",
    "watch": "177",
    "star": "386",
    "fork": "131"
  },
  {
    "name": "奕潇/OpenSNS-V5开源版",
    "desc": "2017年9月29日更新,全面升级到V5\n产品介绍:www.opensns.cn\n业界最强大的开源SNS系统,最受社交创业项目欢迎的开源项目。",
    "watch": "173",
    "star": "353",
    "fork": "206"
  },
  {
    "name": "B_fox/ke361",
    "desc": "淘宝客程序 —— 突破了传统淘宝客程序对自动采集商品收费的模式,该程序的自动 采集模块对于所有人开放,代码不加密,方便大家修改。集成淘点金组件,自动转换淘宝链接为淘宝客推广链接。",
    "watch": "171",
    "star": "351",
    "fork": "150"
  }
]

这次项目主要是简单的练习一下模块的使用,以及几个npm包,看了node文档,还有很多东西需要看~~

分享到:更多 ()
标签:nodejs

相关推荐

  • JS输出格式化的json字符串
  • AI 编辑器 cursor 如何禁止自动更新
  • AI 编辑器 cursor 工具栏改成和 vscode 一样的左侧 竖向展示
  • 将docker安装到D盘或者其他目录
  • 使用 python 给音频增加水印,剪辑压缩后不丢失!
  • nodejs 脚本打包为可执行文件
  • 初学 python 笔记
  • nodejs 同时运行多个脚本
关于我

小天明 北京·朝阳 前端搬砖工程师

碎碎念):(来自公众号)

热门文章

  • 踩坑记录——iphone上safari开启隐身模式时localStorage变为只读-雅荷心语博客踩坑记录——iphone上safari开启隐身模式时localStorage变为只读2017-02-21评论(4)
  • 程序员是怎样一群人-雅荷心语博客程序员是怎样一群人2015-12-08评论(3)
  • 百度你个大毒瘤 - 吐糟博客这几天打不开事情-雅荷心语博客百度你个大毒瘤 – 吐糟博客这几天打不开事情2015-12-28评论(2)
  • PHP 非对称加密 openssl 加密及解密方法-雅荷心语博客PHP 非对称加密 openssl 加密及解密方法2016-05-17评论(2)
  • PHPStorm10 下载安装破解汉化-雅荷心语博客PHPStorm10 下载安装破解汉化2015-12-15评论(2)
2025年7月
一 二 三 四 五 六 日
« 六    
 123456
78910111213
14151617181920
21222324252627
28293031  

最新评论

  • 前端小武 8年前 (2017-04-06)说:
    我看到了layer
  • 丁艳平 8年前 (2017-03-03)说:
  • Dawn 9年前 (2016-09-16)说:
    call_user_func_array最后的例子是错哦,你用bc方法去调用类里 另外一个方法就知道问题所在了。情况1.调用非静态方法 第一个参数应该传[类的实例,调用方法] (既然有类实例了直接-&
  • Dawn 9年前 (2016-06-21)说:
    tp框架设置了全局捕获异常的,这也没什么。坑的是 他捕获了异常。然后全部返回404。。。不知道的 还以为自己网站被删除了
  • Dawn 9年前 (2016-05-17)说:
    构造函数里的判断 用异常机制可能更好一些

其他类型

  • 芊云全景
  • 配音兔AI配音神器

博客类型

  • 芊云全景
  • 配音兔AI配音神器

左邻右舍

  • 易水寒
  • 楼教主
  • 芊云全景
  • 贤心
  • 配音兔AI配音神器

雅荷心语博客 -心之所向便是光

联系我们关于我们

© 2025 雅荷心语博客   网站地图