Skip to content

Commit f502038

Browse files
author
jadepam
committed
feat: 升级puppeteer依赖
1 parent d3d412c commit f502038

26 files changed

+2707
-62
lines changed

.gitignore

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2+
/node_modules
3+
/crawer/json/*
4+
/crawer/images/*

README.en.md

-36
This file was deleted.

README.md

+47-26
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,60 @@
11
# nodecrawler
22

3-
#### 介绍
4-
{**以下是码云平台说明,您可以替换此简介**
5-
码云是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台
6-
无论是个人、团队、或是企业,都能够用码云实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)}
73

8-
#### 软件架构
9-
软件架构说明
4+
```
5+
git clone [email protected]:jadepam/nodecrawler.git
6+
npm install
7+
puppeteer:npm run start
8+
crawer:npm run start
9+
```
1010

11+
## 命令行:npm run jsp
1112

12-
#### 安装教程
13+
本地jspnew文件下,会生成上次执行npm run jsp后本地新增的路由页面
1314

14-
1. xxxx
15-
2. xxxx
16-
3. xxxx
15+
此处路由页面,指代config/routers文件下,设置jspPage:true的页面,如
16+
```
17+
{
18+
path: '/member-all',
19+
name: '会员分析-整体',
20+
component: './member-all/index',
21+
jspPage:true
22+
}
23+
```
1724

18-
#### 使用说明
25+
适用:java老系统项目jsp页面(iframe)+react等单页面应用项目,根据路由配置自动生成jsp页面
1926

20-
1. xxxx
21-
2. xxxx
22-
3. xxxx
27+
iframe高度适应
2328

24-
#### 参与贡献
29+
1、[element-resize-detector]
30+
原理:用该插件监听iframe元素高度,通过window.postMessage()传值给父标签,jsp页面通过 window.addEventListener('message',{})方法监听到高度变化并设置iframe父标签高度
31+
32+
单页面配置:
33+
```
34+
import elementResizeDetectorMaker from 'element-resize-detector'
35+
const resize_height=elementResizeDetectorMaker()
36+
37+
class Box extends React.Component{
38+
componentDidMount() {
39+
resize_height.listenTo(this.body, (el) => {
40+
window.parent.postMessage(el.offsetHeight, '*');
41+
})
42+
}
43+
}
44+
export default Box
45+
```
46+
jsp页面配置:
47+
```
48+
<iframe id="vue-iframe" src="/resources/dist/index.html/#${item}" frameborder="0" width="100%"></iframe>
49+
<script>
50+
window.addEventListener('message',function(e){
51+
document.getElementById('vue-iframe').height=e.data
52+
})
53+
</script>
54+
```
55+
56+
2、[iframe-resizer](https://github.com/davidjbradshaw/iframe-resizer)
2557

26-
1. Fork 本仓库
27-
2. 新建 Feat_xxx 分支
28-
3. 提交代码
29-
4. 新建 Pull Request
3058

3159

32-
#### 码云特技
3360

34-
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
35-
2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com)
36-
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目
37-
4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
38-
5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
39-
6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)

cache/screenshot_1673613515165.png

490 KB
Loading

config/routers/index.js

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import memberAll from './member-all'
2+
import memberStore from './member-store'
3+
4+
export const inRoutes=[
5+
...memberAll,
6+
...memberStore
7+
]
8+
9+
export default [
10+
{
11+
path: '/',
12+
component: './index/index',
13+
// redirect: '/member-all',
14+
},
15+
{
16+
path: '/',
17+
component: '../layouts',
18+
routes: inRoutes
19+
}
20+
]

config/routers/member-all.js

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
export default [
2+
{
3+
path: '/member-all',
4+
name: '会员分析-整体',
5+
component: './member-all/index',
6+
jspPage:true
7+
},
8+
{
9+
path: '/enterprise',
10+
name: '企业会员',
11+
component: './member-all/enterprise/list'
12+
},
13+
{
14+
path: '/single',
15+
name: '个人会员',
16+
component: './member-all/single/list'
17+
},
18+
{
19+
path: '/single/detail',
20+
name: '个人会员详情',
21+
component: './member-all/single/detail/detail',
22+
hidden: true
23+
},
24+
{
25+
path: '/potential',
26+
name: '潜在会员',
27+
component: './member-all/potential/list'
28+
}
29+
]

config/routers/member-store.js

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export default [
2+
{
3+
path: '/member-store',
4+
name: '会员分析-门店',
5+
component: './member-store/index',
6+
jspPage:true
7+
},
8+
]

crawer/$downImg.js

+146
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
var path = require('path'),
2+
root_path = process.cwd(),
3+
crawler = require('./crawer'),
4+
fs = require('fs');
5+
6+
// fs.appendFileSync('getImg.json','[');
7+
var headers = {}
8+
let host = 'http://www.lanrentuku.com';
9+
let cNum = 0, imgNum = 0,index=0; // 计数
10+
// 初始化clawler对象
11+
crawler.initCrawler(headers, res => {
12+
let $ = res.$;
13+
console.log($('.ol_layout.fn-clear .k_left').length)
14+
15+
16+
17+
// https://www.easyicon.net/update/
18+
// 格式化请求到的数据
19+
// let arr=Object.keys(Array.from({length:21}));
20+
// arr.forEach(r=>{
21+
// if(r>1){
22+
// fs.mkdir(`./images/${r}`,function(error){
23+
// if(error){
24+
// console.log(error);
25+
// return false;
26+
// }
27+
// console.log('创建目录成功');
28+
// })
29+
// getNEXPage(`https://www.easyicon.net/update/${r}/`,`./images/${r}`)
30+
// }
31+
// })
32+
33+
let pages=[{page:20,data:[0]}]
34+
pages.map(r=>{
35+
let name = `./images/${r.page}`
36+
fs.mkdir(name,function(error){
37+
if(error){
38+
console.log(error);
39+
return false;
40+
}
41+
console.log('创建目录成功');
42+
})
43+
getNEXPage(`https://www.easyicon.net/update/${r.page}`,`./images/${r.page}`,r.data)
44+
})
45+
46+
47+
48+
49+
})
50+
// 开始请求
51+
crawler.c.queue('https://www.easyicon.net/update/1')
52+
53+
54+
function getNEXPage(url,dir,arr) {
55+
crawler.c.queue({
56+
uri: url,
57+
callback: function(err,res,done) {
58+
if (err) {
59+
return err
60+
}
61+
let $ = res.$;
62+
$('.ol_layout.fn-clear').each((i, e) => {
63+
if(arr.find(r=> r===i)){
64+
fs.mkdir(`${dir}/${i}/`,function(error){
65+
if(error){
66+
console.log(error);
67+
return false;
68+
}
69+
console.log('创建目录成功');
70+
})
71+
$(e).find('.k_left').each((k,item)=>{
72+
let url = $(item).find('a').attr('href')
73+
let id =url.split('/')[5]
74+
downImg(`https://www.easyicon.net/download/png/${id}/64/`,k,`${dir}/${i}/`)//下载log
75+
})
76+
}
77+
78+
79+
})
80+
done()
81+
}
82+
})
83+
}
84+
85+
86+
// 请求每个品牌的页面
87+
// function getPage(url, index,name) {
88+
// crawler.c.queue({
89+
// uri: url,
90+
// callback: function(err,res,done) {
91+
// if (err) {
92+
// return err
93+
// }
94+
// let $ = res.$;
95+
// let str={type:name,list:[]}
96+
// $('.content-png img').each((i, e) => {
97+
// index++;
98+
// crawler.num++; // 请求成功
99+
// str.list.push({
100+
// "type":name,
101+
// "fromPageTitleEnc": $(e).attr('alt'),
102+
// "middleURL":`${name}/${index}.png`
103+
// })
104+
// downImg($(e).attr('src'),i,`type/${name}/`)//下载log
105+
// cNum++;
106+
// })
107+
// // 写入json文件, 存入数据库亦可
108+
// fs.appendFile('./json/getImg.json',JSON.stringify(str)+',', function(err) {
109+
// if (err) {
110+
// console.error(err,"json err");
111+
// return;
112+
// }
113+
// // 写入成功
114+
115+
// });
116+
// done()
117+
// }
118+
// })
119+
// }
120+
121+
function downImg(link, name,file) {
122+
crawler.c.queue({
123+
uri: link,
124+
encoding: null,
125+
jQuery: false,
126+
callback: function (err, res, done) {
127+
if (err) {
128+
console.error(err.stack);
129+
} else {
130+
imgNum++;
131+
fs.createWriteStream(`${file?file:'./images/'}` + name+'.png').write(res.body);
132+
console.log('下载成功: %d', imgNum);
133+
end();
134+
}
135+
done();
136+
}
137+
});
138+
}
139+
140+
function end() {
141+
if (crawler.num == cNum && cNum == imgNum) {
142+
// fs.appendFileSync('getImg.json',']');
143+
// 如果请求并且写入完成, 退出程序
144+
process.exit(1)
145+
}
146+
}

0 commit comments

Comments
 (0)