今天迟迟没有发德惠高考成绩单,因为长春市招生信息网(http://cczsb.changchun.jl.cn) 根本就没有发布长春地区的06年高考成绩查询系统(当然也可能利用一个我们无法获知的网址发布),我获得一个人的高考成绩都是问题,就别说获知全地区的成绩单了,既然如此,等吧。
然后就听说吉林教育电视台的网站可以免费查分的,不久就连新浪网都已经公布这个链接(http://www.jletv.cn)了。
其实这个网站我大概20多天前也听说过,高考后没几天,我从铮铮那儿回学校,吉大一院墙外对着文化广场的那块广告牌就了“登陆jle.cn查询高考成绩”的广告。出成绩那天,我把这个网站扔给铮铮,让他看看有没有办法破解一下,铮铮还很吃惊:“我说,这不是咱俩那天在那块儿看到的么?!”
当时那个系统是jsp的自然就别想破解了,继续像去年编个程序把成绩单通用查询下来吧,可这回页面布局实在不适合用Excel做Web查询:表格是纵排的,导入后必须转置才能二次编辑,想了许久没有头绪,这个计划就先搁置了。
过了几天,jletv的查询系统居然变成php了,又把网址扔给铮铮,还是别想破解。这时候因为着急要知道几个同学的成绩,无奈之下,我就玩儿了点儿阴的:让铮铮把他刚做的链接分析给我,我就干脆把全德惠考生的成绩页面都用FlashGET给Down下来了,然后我用搜索“文件包含以下内容”的法子总可以查出来了吧!当然,做全德惠考生链接的时候,还是借用了一下Excel,编了一个VB宏。但现在想想,用C编一个输入链接列表的代码似乎更方便。
——扩展名是php时居然什么都查不出来,非得改称txt才行!
能查到别人的成绩了,看着手头这3000多个文件,总不能白Down了吧,想了想,干脆用C编一个小程序把这一个个文件中的成绩数据都筛出来,说干就干!
筛选程序好编,这一年ACM培训就是联系处理这些数据了,但文件的读写操作却是实在不熟悉,为避免麻烦,干脆借助批处理算了——还好放假前从图书馆借了一本《Windows 9X/Me/2000/XP/2003 DOS命令行技术大全》,从中查到了重定向符“>>”的作用,用Excel编写个宏,输出一个批处理,就这样就把成绩都给筛出来了,我发现这比去年的方法要快多了。
同样的道理,取下德惠文科成绩单。
附:相关的网址:http://219.149.211.24/other/cxxt.php?KSH=&KH=279000109
附2:对应的批处理文件样式:test.exe <66.txt >>result.txt
附3:筛选用的C源程序,简单却十分有效
#include <stdio.h>
void read(void);
int main(){
read();
return 0;
}
void read(void){
//此函数用来读取文件中有价值的信息
int i;
char buffer[2000],temp;
for(i=1;i<=52;i++)
fgets(buffer,2000,stdin);//筛除前面多余的行
for(i=1;i<=93;i++)
getchar();//筛除前面多余的字符
for(i=1;i<=14;i++)
putchar(getchar());
printf(" ");
for(i=1;i<=4;i++)
fgets(buffer,2000,stdin);//筛除前面多余的行
for(i=1;i<=81;i++)
getchar();//筛除前面多余的字符
for(i=1;i<=9;i++)
putchar(getchar());
printf(" ");
for(i=1;i<=4;i++)
fgets(buffer,2000,stdin);//筛除前面多余的行
for(i=1;i<=81;i++)
getchar();//筛除前面多余的字符
while(temp=getchar()){
if(temp=='<')break;
putchar(temp);
}
printf(" ");
for(i=1;i<=4;i++)
fgets(buffer,2000,stdin);//筛除前面多余的行
for(i=1;i<=81;i++)
getchar();//筛除前面多余的字符
while(temp=getchar()){
if(temp=='<')break;
putchar(temp);
}
printf(" ");
for(i=1;i<=4;i++)
fgets(buffer,2000,stdin);//筛除前面多余的行
for(i=1;i<=81;i++)
getchar();//筛除前面多余的字符
while(temp=getchar()){
if(temp=='<')break;
putchar(temp);
}
printf(" ");
for(i=1;i<=4;i++)
fgets(buffer,2000,stdin);//筛除前面多余的行
for(i=1;i<=81;i++)
getchar();//筛除前面多余的字符
while(temp=getchar()){
if(temp=='<')break;
putchar(temp);
}
printf(" ");
for(i=1;i<=4;i++)
fgets(buffer,2000,stdin);//筛除前面多余的行
for(i=1;i<=81;i++)
getchar();//筛除前面多余的字符
while(temp=getchar()){
if(temp=='<')break;
putchar(temp);
}
printf(" ");
for(i=1;i<=4;i++)
fgets(buffer,2000,stdin);//筛除前面多余的行
for(i=1;i<=81;i++)
getchar();//筛除前面多余的字符
while(temp=getchar()){
if(temp=='<')break;
putchar(temp);
}
printf(" ");
for(i=1;i<=4;i++)
fgets(buffer,2000,stdin);//筛除前面多余的行
for(i=1;i<=81;i++)
getchar();//筛除前面多余的字符
while(temp=getchar()){
if(temp=='<')break;
putchar(temp);
}
printf(" ");
for(i=1;i<=4;i++)
fgets(buffer,2000,stdin);//筛除前面多余的行
for(i=1;i<=81;i++)
getchar();//筛除前面多余的字符
while(temp=getchar()){
if(temp=='<')break;
putchar(temp);
}
printf("/n");
}
本文记录了作者使用各种技术手段从特定网站抓取高考成绩的过程,包括使用FlashGET下载网页、批处理命令筛选数据及编写C程序进行数据提取。

1万+

被折叠的 条评论
为什么被折叠?



