爬虫实战一例

爬虫需求由来

我的目的很单纯,只是想知道这个小测试背后的测试结果数据,看能不能获取到一些有用的信息。

page1
page1
page2
page2

分析

通过观察,我们会发现结果页的数据很少,然而就这样简简单单的几个数据就形成了一个完整的结果,还能产生一定的传播效应。接下来开始我们一探究竟。

切入点

通过chrome我们很容易发现,这不是一个后端渲染的页面,我们不需要去爬完整的页面,再渲染页面,然后通过造作dom获取数据。
我们也能够很容易能够发现他的数据来自于哪一个接口。接口是https://www.goodstudydayup.com:1443/wnl/H5Test/nameresult?tid=25&name=%E6%B5%8B%E8%AF%95&op=0

通过肉眼观察,我们发现这个接口有如下3个参数:

  • tid=25
  • name=%E6%B5%8B%E8%AF%95
  • op=0

open in new tab,返回的数据如下:

1
2
3
4
5
6
7
8
9
10
11
12
{
code: "200",
msg: "ok",
data: {
title: "赵丽颖",
placehold: "的命运相似明星是",
icon: "https://cdn.jptj.goodstudydayup.com/cover/201807/1532503163444.jpeg",
point: "6",
desc: "你的命运和赵丽颖相似,喜欢脚踏实地的前进,独一无二的你总有一天能够功成名就,实现自己的梦想。",
back_small: "https://cdn.jptj.goodstudydayup.com/cover/201807/1532502774491.jpeg"
}
}

看到这里心中暗喜了下,才三个参数,那应该很好猜,name我们一看便知道是什么。用户的名字。那tid和op代表什么意思呢?

tid和op估计是猜不出来,我们不试一试。初高中大学我们都做过实验,知道要去探究某一个输入(参数)对响应(返回值)有什么影响。只要改变这一项输入的值,保证其他输入不变。

我们先从op开始验证,只改变链接上的op值。从链接看op是一个整数,我们用不同的整数验证。

op(输入) response(响应)
0 title: “赵丽颖”
-1 title: “吴彦祖”,
1 title: “吴彦祖”,
2 title: “吴彦祖”,

看到这里大概有点眉目了,我们先不做结论。继续往下验证两种情况。op为0与改变name,op为1改变name值,op为-1改变name值。

op(输入) name(输入) response(响应)
0 测试 title: “赵丽颖”
0 测试1 title: “宋慧乔”
0 测试2 title: “小S”
0 测试3 title: “赵丽颖”
op(输入) name(输入) response(响应)
1 测试 title: “吴彦祖”
1 测试1 title: “杨洋”
1 测试2 title: “林更新”
1 测试3 title: “林更新”
op(输入) name(输入) response(响应)
-1 测试 title: “吴彦祖”
-1 测试1 title: “杨洋”
-1 测试2 title: “林更新”
-1 测试3 title: “林更新”

看完上面的结果我们基本可以得出结论。op原来代表性别。1是男性,0是女性(他自己定的值,不用去质疑)。其他整数默认为男性。 这里我们可以很自然的想到一个疑问,为什么性别这个参数它没有命名为sex 或则gender,而是op?

我们可以猜测下,op(option?),难道不一定代表性别?
先放下这个疑问不管。继续往下探索。

name,op我们都大概清晰了,接下来就是去研究tid代表什么意思了?老规矩,tid改变,其它值不变。tid初始值等于25,我们取前10条数据的结果看看。

通过代码获取结果数据

1
2
3
4
5
6
7
8
9
10
(async () => {    
Array.from(new Array(30),(val,index)=>index).forEach(async(v,k) => {
let tid = v;
let name = '测试';
let op = 0;
let reptileUrl = `https://www.goodstudydayup.com:1443/wnl/H5Test/nameresult?tid=${tid}&name=${name}&op=${op}`;
let res = await superagent.get(reptileUrl);
console.log(tid, res.text);
});
})();

数据结果

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
3 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
2 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
4 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
1 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
7 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
9 '{"code":"200","msg":"ok","data":{"title":"锄头一把","placehold":"的名字价值","icon":"https://cdn.jptj.goodstudydayup.com/cover/201805/1526372362583.jpeg","point":"2,5,8","desc":"虽说低调是美德,但你的名字可能就显得有点不讲究了,对事业的帮助率很低。赶紧想想如何提升自己名字的价值吧!","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
6 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
5 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
10 '{"code":"200","msg":"ok","data":{"title":"德国","placehold":"的最佳旅行地是","icon":"https://cdn.jptj.goodstudydayup.com/cover/201805/1526376399512.jpeg","point":"2,15","desc":"你拥有敢于冒险的勇气,做任何事情都会精细研究,提前做好规划,一步一步完成,所以有计划的旅行更适合你哦!","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
12 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
15 '{"code":"200","msg":"ok","data":{"title":"晴","placehold":"的性格天气是","icon":"https://cdn.jptj.goodstudydayup.com/cover/201805/1526977505571.jpeg","point":"1,2,3","desc":"晴天代表你乐观开朗,内心充满阳光,这样的你,面对工作和生活时,你也能保持不错的精神状态。","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
11 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
22 '{"code":"200","msg":"ok","data":{"title":"竞争对手","placehold":"与爱人的前世关系是","icon":"https://cdn.jptj.goodstudydayup.com/cover/201806/1529996973828.jpeg","point":"2","desc":"前世的你们是互相竞争的对手,今世的你们惺惺相惜,彼此的牵绊会很深,感情也会越来越深厚。","back_small":"https://cdn.jptj.goodstudydayup.com/cover/201806/1529996467162.jpeg"}}'
14 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
20 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
18 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
17 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
0 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
19 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
16 '{"code":"200","msg":"ok","data":{"title":"1","placehold":"1","icon":"https://cdn.jptj.goodstudydayup.com/cover/201805/1527146243892.jpeg","point":"1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16","desc":"11","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
8 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
23 '{"code":"200","msg":"ok","data":{"title":"28岁","placehold":"的暴富年龄段是","icon":"https://cdn.jptj.goodstudydayup.com/cover/201807/1530521690641.jpeg","point":"2","desc":"你自身对于金钱很是敏感,知道自己应该投资什么来快速获取利润,所以赚钱相对容易,而且后面会财源不断。","back_small":"https://cdn.jptj.goodstudydayup.com/cover/201807/1530521141284.jpeg"}}'
13 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'
24 '{"code":"200","msg":"ok","data":{"title":"宫保鸡丁","placehold":"的个性代表菜是","icon":"https://cdn.jptj.goodstudydayup.com/cover/201807/1531210375761.jpeg","point":"2","desc":"色调鲜艳、香辣味浓,吃起来肉质滑嫩。如你一般,让人满心欢喜,回味悠长。简而言之,你的天生属性就是招人疼。","back_small":"https://cdn.jptj.goodstudydayup.com/cover/201807/1531209184727.jpeg"}}'
25 '{"code":"200","msg":"ok","data":{"title":"林志玲","placehold":"的命运相似明星是","icon":"https://cdn.jptj.goodstudydayup.com/cover/201807/1532503163593.jpeg","point":"2","desc":"你的气质宛若林志玲一般充满大家闺秀的气息,而你的命运也似乎和她一样,只要你和她一样有颗坚韧的心,成功指日可待。","back_small":"https://cdn.jptj.goodstudydayup.com/cover/201807/1532502774491.jpeg"}}'
26 '{"code":"200","msg":"ok","data":{"title":"雅典娜","placehold":"的守护神是","icon":"https://cdn.jptj.goodstudydayup.com/cover/201808/1533635829116.jpeg","point":"2","desc":"你像智慧女神一样,是最聪明的女神,是智慧和力量的完美结合,你代表着女性的力量,眼神明亮,性格开朗。","back_small":"https://cdn.jptj.goodstudydayup.com/cover/201808/1533634370304.jpeg"}}'
29 '{"code":"200","msg":"ok","data":{"title":"锦觅","placehold":"的角色是","icon":"https://cdn.jptj.goodstudydayup.com/cover/201808/1535441155154.jpeg","point":"1,2","desc":"你向来是一个天真烂漫的人,为朋友可以两肋插刀,不管对待生活还是感情都有一腔赤诚,哪怕受伤都在所不惜。","back_small":"https://cdn.jptj.goodstudydayup.com/cover/201808/1535440988818.jpeg"}}'
27 '{"code":"200","msg":"ok","data":{"title":"纯妃","placehold":"的角色是","icon":"https://cdn.jptj.goodstudydayup.com/cover/201808/1534230311231.jpeg","point":"2,10","desc":"你在生活中言不由衷,喜欢带着面具的人,对于生活中你所需要的东西,你会竭尽全力的去做并得到它。","back_small":"https://cdn.jptj.goodstudydayup.com/cover/201808/1534227874391.jpeg"}}'
21 '{"code":"200","msg":"ok","data":{"title":"偏财运欠佳","placehold":"的下半年","icon":"https://cdn.jptj.goodstudydayup.com/cover/201806/1528267891823.jpeg","point":"2","desc":"你下半年偏财运也不大好哦,所以还是把精力用在正财上面吧,好好工作,才会有满意的回报!","back_small":"https://cdn.jptj.goodstudydayup.com/cover/201806/1528267523938.jpeg"}}'
28 '{"code":"200","msg":"ok","data":{"icon":"https://cdn.jptj.goodstudydayup.com/cover/","back_small":"https://cdn.jptj.goodstudydayup.com/cover/"}}'

分析数据,我们很容易发现并不是所有的tid都能获得有效数据。tid为9的结果数据有效。 [有效数据].data.title 会有值。通过代码找到有效的tid.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if(true) {
(async () => {
Array.from(new Array(1000),(val,index)=>index).forEach(async(v,k) => {
let tid = v;
let name = '测试';
let op = 0;
let reptileUrl = `https://www.goodstudydayup.com:1443/wnl/H5Test/nameresult?tid=${tid}&name=${name}&op=${op}`;
let res = await superagent.get(reptileUrl);
res = JSON.parse(res.text);
if(res.data.title) {
console.log(tid);
}
});
})();
}

//获取到的有效值如下:

1
2
3
4
5
6
7
8
9
10
11
12
16
22
24
10
25
27
9
29
21
23
26
15

到此我们三个参数我们全部我们全部明白了。

  • tid: [9,10, 15, 16,21,22,23,24,25,26,27, 29]
  • op: [0,1]
  • name: *

经过如上的分析,我们可以正式开始为所欲为的爬数据了。

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
if(false) {
let name = '子义';
let tids = [9,10, 15, 16,21,22,23,24,25,26,27, 29];
tids.forEach(async (tid) => {
[0,1].forEach(async (op) => {
try {
let reptileUrl = `https://www.goodstudydayup.com:1443/wnl/H5Test/nameresult?tid=${tid}&name=${name}&op=${op}`;
let r1 = await superagent.get(reptileUrl);
let o1 = JSON.parse(r1.text);
if (o1.data.title) {
//let flag = await db.Wnl.find({ 'data.title': o1.data.title });
//if ( flag.length === 0 ) {
o1.data.tid = tid;
o1.data.op = op;
o1.data.name = name;
db.Wnl.create(o1);
let names = [
'梦琪', '之桃', '慕青', '尔岚', '初夏', '沛菡', '傲珊', '曼文', '乐菱', '惜文', '香寒', '新柔', '语蓉', '海安', '夜蓉', '涵柏', '水桃', '醉蓝', '语琴', '从彤', '傲晴', '语兰', '又菱', '碧彤', '元霜', '怜梦', '紫寒', '妙彤', '曼易', '南莲', '紫翠', '雨寒', '易烟', '如萱', '若南', '寻真', '晓亦', '向珊', '慕灵', '以蕊', '映易', '雪柳', '海云', '凝天', '沛珊', '寒云', '冰旋', '宛儿', '绿真', '晓霜', '碧凡', '夏菡', '曼香', '若烟', '半梦', '雅绿', '冰蓝', '灵槐', '平安', '书翠', '翠风', '代云', '梦曼', '幼翠', '听寒', '梦柏', '醉易', '访旋', '亦玉', '凌萱', '访卉', '怀亦', '笑蓝', '靖柏', '夜蕾', '冰夏', '梦松', '书雪', '乐枫', '念薇', '靖雁', '从寒', '觅波', '静曼', '凡旋', '以亦', '念露', '芷蕾', '千兰', '新波', '代真', '新蕾', '雁玉', '冷卉', '紫山', '千琴', '傲芙', '盼山', '怀蝶', '冰兰', '山柏', '翠萱', '问旋', '白易', '问筠', '如霜', '半芹', '丹珍', '冰彤', '亦寒', '之瑶', '冰露', '尔珍', '谷雪', '乐萱', '涵菡', '海莲', '傲蕾', '青槐', '易梦', '惜雪', '宛海', '之柔', '夏青', '亦瑶', '妙菡', '紫蓝', '幻柏', '元风', '冰枫', '访蕊', '芷蕊', '凡蕾', '凡柔', '安蕾', '天荷', '含玉', '书兰', '雅琴', '书瑶', '从安', '夏槐', '念芹', '代曼', '幻珊', '谷丝', '秋翠', '白晴', '海露', '代荷', '含玉', '书蕾', '听白', '灵雁', '雪青', '乐瑶', '含烟', '涵双', '平蝶', '雅蕊', '傲之', '灵薇', '含蕾', '从梦', '从蓉', '初丹。听兰', '听蓉', '语芙', '夏彤', '凌瑶', '忆翠', '幻灵', '怜菡', '紫南', '依珊', '妙竹', '访烟', '怜蕾', '映寒', '友绿', '冰萍', '惜霜', '凌香', '芷蕾', '雁卉', '迎梦', '元柏', '代萱', '紫真', '千青', '凌寒', '紫安', '寒安', '怀蕊', '秋荷', '涵雁', '以山', '凡梅', '盼曼', '翠彤', '谷冬', '冷安', '千萍', '冰烟', '雅阳', '友绿', '南松', '诗云', '飞风', '寄灵', '书芹', '幼蓉', '以蓝', '笑寒', '忆寒', '秋烟', '芷巧', '水香', '映之', '醉波', '幻莲', '夜山', '芷卉', '向彤', '小玉', '幼南', '凡梦', '尔曼', '念波', '迎松', '青寒', '笑天', '涵蕾', '碧菡', '映秋', '盼烟', '忆山', '以寒', '寒香', '小凡', '代亦', '梦露', '映波', '友蕊', '寄凡', '怜蕾', '雁枫', '水绿', '曼荷', '笑珊', '寒珊', '谷南', '慕儿', '夏岚', '友儿', '小萱', '紫青', '妙菱', '冬寒', '曼柔', '语蝶', '青筠', '夜安', '觅海', '问安', '晓槐', '雅山', '访云', '翠容', '寒凡', '晓绿', '以菱', '冬云', '含玉', '访枫', '含卉', '夜白', '冷安', '灵竹', '醉薇', '元珊', '幻波', '盼夏', '元瑶', '迎曼', '水云', '访琴', '谷波', '笑白', '妙海', '紫霜', '凌旋', '孤丝', '怜寒', '凡松', '青丝', '翠安', '如天', '凌雪', '绮菱', '代云', '香薇', '冬灵', '凌珍', '沛文', '紫槐', '幻柏', '采文', '雪旋', '盼海', '映梦', '安雁', '映容', '凝阳', '访风', '天亦', '觅风', '小霜', '雪萍', '半雪', '山柳', '谷雪', '靖易', '白薇', '梦菡', '飞绿', '如波', '又晴', '友易', '香菱', '冬亦', '问雁', '海冬', '秋灵', '凝芙', '念烟', '白山', '从灵', '尔芙', '迎蓉', '念寒', '翠绿', '翠芙', '靖儿', '妙柏', '千凝', '小珍', '妙旋', '雪枫', '夏菡', '绮琴', '雨双', '听枫', '觅荷', '凡之', '晓凡', '雅彤', '孤风', '从安', '绮彤', '之玉', '雨珍', '幻丝', '代梅', '青亦', '元菱', '海瑶', '飞槐', '听露', '梦岚', '幻竹', '谷云', '忆霜', '水瑶', '慕晴', '秋双', '雨真', '觅珍', '丹雪', '元枫', '思天', '如松', '妙晴', '谷秋', '妙松', '晓夏', '宛筠', '碧琴', '盼兰', '小夏', '安容', '青曼', '千儿', '寻双', '涵瑶', '冷梅', '秋柔', '思菱', '醉波', '醉柳', '以寒', '迎夏', '向雪', '以丹', '依凝', '如柏', '雁菱', '凝竹', '宛白', '初柔', '南蕾', '书萱', '梦槐', '南琴', '绿海', '沛儿', '晓瑶', '凝蝶', '紫雪', '念双', '念真', '曼寒', '凡霜', '飞雪', '雪兰', '雅霜', '从蓉', '冷雪', '靖巧', '翠丝', '觅翠', '凡白', '乐蓉', '迎波', '丹烟', '梦旋', '书双', '念桃', '夜天', '安筠', '觅柔', '初南', '秋蝶', '千易', '安露', '诗蕊', '山雁', '友菱', '香露', '晓兰', '白卉', '语山', '冷珍', '秋翠', '夏柳', '如之', '忆南', '书易', '翠桃', '寄瑶', '如曼', '问柳', '幻桃', '又菡', '醉蝶', '亦绿', '诗珊', '听芹', '新之', '易巧', '念云', '晓灵', '静枫', '夏蓉', '如南', '幼丝', '秋白', '冰安', '秋白', '南风', '醉山', '初彤', '凝海', '紫文', '凌晴', '雅琴', '傲安', '傲之', '初蝶', '代芹', '诗霜', '碧灵', '诗柳', '夏柳', '采白', '慕梅', '乐安', '冬菱', '紫安', '宛凝', '雨雪', '易真', '安荷', '静竹', '代柔', '丹秋', '绮梅', '依白', '凝荷', '幼珊', '忆彤', '凌青', '之桃', '芷荷', '听荷', '代玉', '念珍', '梦菲', '夜春', '千秋', '白秋', '谷菱', '飞松', '初瑶', '惜灵', '梦易', '新瑶', '曼梅', '碧曼', '友瑶', '雨兰', '夜柳', '芷珍', '含芙', '夜云', '依萱', '凝雁', '以莲', '安南', '幼晴', '尔琴', '飞阳', '白凡', '沛萍', '雪瑶', '向卉', '采文', '乐珍', '寒荷', '觅双', '白桃', '安卉', '迎曼', '盼雁', '乐松', '涵山', '问枫', '以柳', '含海', '翠曼', '忆梅', '涵柳', '海蓝', '晓曼', '代珊', '忆丹', '静芙', '绮兰', '梦安', '紫丝', '千雁', '凝珍', '香萱', '梦容', '冷雁', '飞柏', '天真', '翠琴', '寄真', '秋荷', '代珊', '初雪', '雅柏', '怜容', '如风', '南露', '紫易', '冰凡', '海雪', '语蓉', '碧玉', '语风', '凝梦', '从雪', '白枫', '傲云', '白梅', '念露', '慕凝', '雅柔', '盼柳', '半青', '从霜', '怀柔', '怜晴', '夜蓉', '代双', '以南', '若菱', '芷文', '南晴', '梦寒', '初翠', '灵波', '问夏', '惜海', '亦旋', '沛芹', '幼萱', '白凝', '初露', '迎海', '绮玉', '凌香', '寻芹', '秋柳', '尔白', '映真', '含雁', '寒松', '寻雪', '青烟', '问蕊', '灵阳', '雪巧', '丹萱', '凡双', '孤萍', '紫菱', '寻凝', '傲柏', '傲儿', '友容', '灵枫', '尔丝', '曼凝', '若蕊', '问丝', '思枫', '水卉', '问梅', '念寒', '诗双', '翠霜', '夜香', '寒蕾', '凡阳', '冷玉', '平彤', '语薇', '幻珊', '紫夏', '凌波', '芷蝶', '丹南', '之双', '凡波', '思雁', '白莲', '从菡', '如容', '采柳', '沛岚', '惜儿', '夜玉', '水儿', '半凡', '语海', '听莲', '幻枫', '念柏', '冰珍', '思山', '凝蕊', '天玉', '思萱', '向梦', '笑南', '夏旋', '之槐', '元灵', '以彤', '采萱', '巧曼', '绿兰', '平蓝', '问萍', '绿蓉', '靖柏。迎蕾', '碧曼', '思卉', '白柏', '妙菡', '怜阳', '雨柏', '雁菡', '梦之', '又莲', '乐荷', '寒天', '凝琴', '书南', '映天', '白梦', '初瑶', '平露', '含巧', '慕蕊', '半莲', '醉卉', '天菱', '青雪', '雅旋', '巧荷', '飞丹', '若灵', '尔云', '幻天', '诗兰', '青梦', '海菡', '灵槐', '忆秋', '寒凝', '凝芙', '绮山', '静白', '尔蓉', '尔冬', '映萱', '白筠', '冰双', '访彤', '绿柏', '夏云', '笑翠', '晓灵', '含双', '盼波', '以云', '怜翠', '雁风', '之卉', '平松', '问儿', '绿柳', '如蓉', '曼容', '天晴', '丹琴', '惜天', '寻琴', '依瑶', '涵易', '忆灵', '从波', '依柔', '问兰', '山晴', '怜珊', '之云', '飞双', '傲白', '沛春', '雨南', '梦之', '笑阳', '代容', '友琴', '雁梅', '友桃', '从露', '语柔', '傲玉', '觅夏', '晓蓝', '新晴', '雨莲', '凝旋', '绿旋', '幻香', '觅双', '冷亦', '忆雪', '友卉', '幻翠', '靖柔', '寻菱', '丹翠', '安阳', '雅寒', '惜筠', '尔安', '雁易', '飞瑶', '夏兰', '沛蓝', '静丹', '山芙', '笑晴', '新烟', '笑旋', '雁兰', '凌翠', '秋莲', '书桃', '傲松', '语儿', '映菡', '初曼', '听云', '初夏', '雅香', '语雪', '初珍', '白安', '冰薇', '诗槐', '冷玉', '冰巧', '之槐', '夏寒', '诗筠', '新梅', '白曼', '安波', '从阳', '含桃', '曼卉', '笑萍', '晓露', '寻菡', '沛白', '平灵', '水彤', '安彤', '涵易', '乐巧', '依风', '紫南', '亦丝', '易蓉', '紫萍', '惜萱', '诗蕾', '寻绿', '诗双', '寻云', '孤丹', '谷蓝', '山灵', '幻丝', '友梅', '从云', '雁丝', '盼旋', '幼旋', '尔蓝', '沛山', '代丝', '觅松', '冰香', '依玉', '冰之', '妙梦', '以冬', '曼青', '冷菱', '雪曼', '安白', '千亦', '凌蝶', '又夏', '南烟。靖易', '沛凝', '翠梅', '书文', '雪卉', '乐儿', '傲丝', '安青', '初蝶', '寄灵', '惜寒', '雨竹', '冬莲', '绮南', '翠柏', '平凡', '亦玉', '孤兰', '秋珊', '新筠', '半芹', '夏瑶', '念文', '晓丝', '涵蕾', '雁凡', '谷兰', '灵凡', '凝云', '曼云', '丹彤', '南霜', '夜梦', '从筠', '雁芙', '语蝶', '依波', '晓旋', '念之', '盼芙', '曼安', '采珊', '初柳', '迎天', '曼安', '南珍', '妙芙', '语柳', '含莲', '晓筠', '夏山', '尔容', '念梦', '傲南', '问薇', '雨灵', '凝安', '冰海', '初珍', '宛菡', '冬卉', '盼晴', '冷荷', '寄翠', '幻梅', '如凡', '语梦', '易梦', '千柔', '向露', '梦玉', '傲霜', '依霜', '灵松', '诗桃', '书蝶', '冰蝶', '山槐', '以晴', '友易', '梦桃', '香菱', '孤云', '水蓉', '雅容', '飞烟', '雁荷', '代芙', '醉易', '夏烟', '依秋', '依波', '紫萱', '涵易', '忆之', '幻巧', '水风', '安寒', '白亦', '怜雪', '听南', '念蕾', '梦竹', '千凡', '寄琴', '采波', '元冬', '思菱', '平卉', '笑柳', '雪卉', '谷梦', '绿蝶', '飞荷', '平安', '孤晴', '芷荷', '曼冬', '尔槐', '以旋', '绿蕊', '初夏', '依丝', '怜南', '千山', '雨安', '水风', '寄柔', '幼枫', '凡桃', '新儿', '夏波', '雨琴', '静槐', '元槐', '映阳', '飞薇', '小凝', '映寒', '傲菡', '谷蕊', '笑槐', '飞兰', '笑卉', '迎荷', '元冬', '书竹', '半烟', '绮波', '小之', '觅露', '夜雪', '寒梦', '尔风', '白梅', '雨旋', '芷珊', '山彤', '尔柳', '沛柔', '灵萱', '沛凝', '白容', '乐蓉', '映安', '依云', '映冬', '凡雁', '梦秋', '醉柳', '梦凡', '若云', '元容', '怀蕾', '灵寒', '天薇', '白风', '访波', '亦凝', '易绿', '夜南', '曼凡', '亦巧', '青易。冰真', '白萱', '友安', '诗翠', '雪珍', '海之', '小蕊', '又琴', '香彤', '语梦', '惜蕊', '迎彤', '沛白', '雁山', '易蓉', '雪晴', '诗珊', '冰绿', '半梅', '笑容', '沛凝', '念瑶', '如冬', '向真', '从蓉', '亦云', '向雁', '尔蝶', '冬易', '丹亦', '夏山', '醉香', '盼夏', '孤菱', '安莲', '问凝', '冬萱', '晓山', '雁蓉', '梦蕊', '山菡', '南莲', '飞双', '凝丝', '思萱', '怀梦', '雨梅', '冷霜', '向松', '迎丝', '迎梅', '听双', '山蝶', '夜梅', '醉冬', '雨筠', '平文', '青文', '半蕾', '幼菱', '寻梅', '含之', '香之', '含蕊', '亦玉', '靖荷', '碧萱', '寒云', '向南', '书雁', '怀薇', '思菱', '忆文', '若山', '向秋', '凡白', '绮烟', '从蕾', '天曼', '又亦', '依琴', '曼彤', '沛槐', '又槐', '元绿', '安珊', '夏之', '易槐', '宛亦', '白翠', '丹云', '问寒', '易文', '傲易', '青旋', '思真', '妙之', '半双', '若翠', '初兰', '怀曼', '惜萍', '初之', '宛丝', '幻儿', '千风', '天蓉', '雅青', '寄文', '代天', '惜珊', '向薇', '冬灵', '惜芹', '凌青', '谷芹', '雁桃', '映雁', '书兰', '寄风', '访烟', '绮晴', '傲柔', '寄容', '以珊', '紫雪', '芷容', '书琴', '寻桃', '涵阳', '怀寒', '易云', '采蓝', '代秋', '惜梦', '尔烟', '谷槐', '怀莲', '涵菱', '水蓝', '访冬', '半兰', '又柔', '冬卉', '安双', '冰岚', '香薇', '语芹', '静珊', '幻露', '访天', '静柏', '凌丝', '小翠', '雁卉', '访文', '凌文', '芷云', '思柔', '巧凡', '慕山', '依云', '千柳', '从凝', '安梦', '香旋', '映天', '安柏', '平萱', '以筠', '忆曼', '新竹', '绮露', '觅儿', '碧蓉', '白竹', '飞兰', '曼雁', '雁露', '凝冬', '含灵', '初阳', '海秋', '冰双', '绿兰', '盼易', '思松', '梦山', '友灵', '绿竹', '灵安', '凌柏', '秋柔', '又蓝', '尔竹', '天蓝', '青枫', '问芙', '语海', '灵珊', '凝丹', '小蕾', '迎夏', '水之', '飞珍', '冰夏', '亦竹', '飞莲', '海白', '元蝶', '芷天', '怀绿', '尔容', '元芹', '若云', '寒烟', '听筠', '采梦', '凝莲', '元彤', '觅山', '代桃', '冷之', '盼秋', '秋寒', '慕蕊', '海亦', '初晴', '巧蕊', '听安', '芷雪', '以松', '梦槐', '寒梅', '香岚', '寄柔', '映冬', '孤容', '晓蕾', '安萱', '听枫', '夜绿', '雪莲', '从丹', '碧蓉', '绮琴', '雨文', '幼荷', '青柏', '初蓝', '忆安', '盼晴', '寻冬', '雪珊', '梦寒', '迎南', '如彤', '采枫', '若雁', '翠阳', '沛容', '幻翠', '山兰', '芷波', '雪瑶', '寄云', '慕卉', '冷松', '涵梅', '书白', '乐天', '雁卉', '宛秋', '傲旋', '新之', '凡儿', '夏真', '静枫', '乐双', '白玉', '问玉', '寄松', '丹蝶', '元瑶', '冰蝶', '访曼', '代灵', '芷烟', '白易', '尔阳', '怜烟', '平卉', '丹寒', '访梦', '绿凝', '冰菱', '语蕊', '思烟', '忆枫', '映菱', '凌兰', '曼岚', '若枫', '傲薇', '凡灵', '乐蕊', '秋灵', '谷槐', '觅云',
'振海', '振国', '正德', '正浩', '伟博', '伟毅', '伟才', '伟诚', '伟茂', '伟懋', '伟祺', '伟彦', '伟晔', '荣轩', '锐泽', '锐真', '锐志', '锐智', '睿博', '睿才', '睿诚', '睿慈', '锐达', '锐锋', '锐翰', '锐进', '锐精', '锐立', '锐利', '锐思', '锐逸', '锐意', '齐骐', '齐骥', '天骐', '天骥', '乐山', '乐水', '立家', '立业', '保国', '卫国', '建功', '建业', '安道', '乐道', '卓群', '超群', '俊雄', '俊雅', '俊彦', '俊逸', '成仁', '成双', '成天', '成文', '成业', '成益', '嘉澍', '嘉熙', '嘉禧', '嘉祥', '嘉歆', '嘉许', '俊悟', '俊晤', '俊侠', '俊贤', '嘉年', '嘉平', '嘉庆', '嘉荣', '嘉容', '嘉瑞', '承福', '承基', '承教', '承平', '成化', '成济', '成礼', '成龙',
'知国', '君宇', '泽城', '温谨', '风宇', '君冠', '文德', '棋苑', '轩峻', '知彰', '泽韶', '尚兴', '远辰 辉轩', '荣茂', '圣瀚', '世翰', '彬逸', '鸿颜', '泽雷', '宇哲', '展信', '晋茂', '远熙', '弘瑞', '弘霖 圣江', '棋泽', '弘德', '轩诚', '博羽', '晋刚', '晋城', '杰邦', '启明', '博恒', '泽胜', '昌裕', '杰玮 德鸿', '智旭', '哲城', '博浩', '依平', '泽拓', '泰耀', '德桦', '鸿灿', '伟耀', '浩善', '伯灿', '月硕 卓耀', '秀方', '鸿祺', '尚林', '建琛', '锐翔', '远志', '彬琪', '靖元', '森晖', '景宸', '朋宸', '淇方 峻浩', '祉鑫', '超耿', '灿轩', '柯昊', '志天', '文崇', '瑾方', '楠睿', '琪硕'
];
names.forEach(async (name) => {
try {
let reptileUrl = `https://www.goodstudydayup.com:1443/wnl/H5Test/nameresult?tid=${tid}&name=${name}&op=${op}`;
let r1 = await superagent.get(reptileUrl);
let o1 = JSON.parse(r1.text);
if (o1.data.title) {
//let flag = await db.Wnl.find({ 'data.title': o1.data.title });
//if ( flag.length === 0 ) {
o1.data.tid = tid;
o1.data.op = op;
o1.data.name = name; console.log(o1);
db.Wnl.create(o1);
//}
}
} catch (e) { }
});
// }
}
} catch (e) {

}
});
});

运行完上面的代码,经过我的测试总计会拿到大概一万条左右的数据。
然而这里面却又很多重复的数据。重复的数据会对我们分析来说没有价值。这里就要考虑如何清洗我们的数据。 所以这里先要对数据做持久化处理。 不然我们怎么清洗数据呢? 持久化数据我们一般会选择写文件或存数据库。 这里根据我们的数据结构(json数据)我们选择MongoDB数据库。

接下来我们开始清洗数据

去重

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
if(false) {    console.log('数据去重');
(async () => {
let data = await db.Wnl.aggregate([
{
$group: {
_id: '$data.title',
count: {
$sum: 1
},
dups: { $addToSet: '$_id' }
}
},
{
$match: { count: { $gt: 1 } }
}
]);

data.forEach((it) => {
it.dups.shift();
db.Wnl.remove({ _id: { $in: it.dups } });
db.Wnl.deleteMany({
_id: { $in: it.dups }
}, (err, res) => {

});
});
})();
}

去玩重结果只剩下几十条数据

数据归档

1
2
3
4
5
6
7
8
9
10
11
if(true) {
let tids = [9,10, 15, 16,21,22,23,24,25,26,27, 29];
tids.forEach(async (tid) => {

let data = await db.Wnl.find({
'data.tid': tid
});

util.writeData(data[0].data.tid, data);
});
}

最终成功归档

1
2
tid10.json tid16.json tid22.json tid24.json tid26.json tid29.json
tid15.json tid21.json tid23.json tid25.json tid27.json tid9.json

最后我们可以单纯的用拿到的数据,单纯的做点其他事了。

未完待续…