4 6级成绩查询

更新时间:2022-11-23 03:47:04 阅读: 评论:0


2022年11月23日发(作者:人教版五年级英语)

python动态⽹页爬取——四六级成绩批量爬取

需求:

四六级成绩查询⽹站我所知道的有两个:学信⽹(/cet/)和99宿舍(/),这两个⽹站采⽤的都是动态⽹页。我使⽤的是学信⽹,好了,⽹

站截图如下:

⽹站的代码如下:

1

2

3

4准考证号:

5请输⼊15位准考证号

6

7姓名:

8姓名超过3个字,可只输⼊前3个

9

10

11 

12

13

14

15

由图中可以看出表单提交的链接为/cet/query,即:/cet/query,好了,填写表单和结果如下:

但是,点击查看源代码之后发现,没有成绩,即代码仍是上⾯那个,之后按F12查看代码:

1

2姓名:

3XXXX

4

5学校:

6XXXXXX

7

8考试类别:

9英语四级

10

11准考证号:

12121

13

14考试时间:

152015年06⽉总分:403
听⼒:132
阅读:

该代码显⽰了成绩,可以知道,该⽹站使⽤的是动态⽹页,⽤的JavaScript或者还是其他的我就不知道了0.0。上⾯为需求。

前⾔:使⽤过BeautifulSoup爬取过,但是BeautifulSoup是爬取不了动态⽹页的,上各种论坛找各种资料,⽤了n种东西,scapy,pyqt等等,⾛了真⼼不少弯路,不是不⾏,应该是我不会

⽤,最终⽤了lenium和phantomjs,这两个应该也是⽬前最流⾏的爬⾍模块了吧。

⼀、导⼊lenium和phantomjs

1fromleniumimportwebdriver

2

3driver=mJS(executable_path='D:')

(url)

_element_by_id('zkzh').nd_keys(i)

_element_by_id('xm').nd_keys(xm)

_elements_by_tag_name('form')[1].submit()

代码说明:

um可以加载很多驱动,⽐如Chrome、FireFox等,这⾥需要有这两个浏览器和驱动才⾏,折腾了⼀下,⽹上说Phantomjs是较好的了

5、6、7分别是准考证号,姓名和提交

⼆、字符处理

提交之后就可以直接查找了:

_element_by_xpath("//tr[3]/td[1]").text

_element_by_xpath("//tr[6]/td[1]").text

代码说明:

1.查看姓名

2.查看分数及其具体成绩

打印之后为:

姓名

403

听⼒

132

阅读

147

写作

142

之后要对分数进⾏字符串处理,选取各部分的数字,这⾥我们采⽤re模块:

1importre

2m=l(r'(w*[0-9]+)w*',chuli2)

其中m是数组,输出的是["403","132","147","142"]

三、数据库

我们学校也不知说很渣还是⼈性化,反正公布了全校的四六级准考证号,当然,是excel的,需要导⼊mysql数据库,打开Excel之后,我发现微软⼤法和Oracle真是⽜逼啊,Excel365居

然有mysqlworkbench连接部分

数据库代码如下:

1importMySQLdb

2

3conn=t(host='localhost',ur='root',passwd='root',db='cet',port=3306,chart='utf8')

4cur=()

5curr=()

e("rezkzh=(%s)"%i)

7xm=ne()[0]

8print"Nameis"+xm

9sqltxt="leibie=(%s),zongfen=(%s),tingli=(%s),yuedu=(%s),xiezuo=(%s)WHEREzkzh=(%s)"%(

10ss,m[0],m[1],m[2],m[3],i)

e(sqltxt)

()

()

()

代码说明:

连接数据库代码

6.连接数据库取得姓名部分

9.这⾏我好⽆语啊,使⽤‘“+ss+”’这样的写法⼀直报错,最终找了半天资料,这个写法我不太喜欢,但是凑合着⽤吧。

12.记得⼀定要提交事务!!!commit()!!!不然是没有效果的

四、使⽤代理服务器(保留以后写)

运⾏了⼀段时间之后,⼤概抓了⼏百⼈的吧,然后就出现要求验证码了,解决办法只能处理验证码或者使⽤代理服务器了,这部分继续加强学习再弄出来了↖(^ω^)↗

五、源代码和效果

1#encoding=utf8

2

3importMySQLdb

4importre

5importtime

6

7fromleniumimportwebdriver

8

9#connectmysql,getzkxhandxm

10conn=t(host='localhost',ur='root',passwd='root',db='cet',port=3306,chart='utf8')

11cur=()

12curr=()

13url='/cet/query'

14

15

16defkaishi(i):

17printi,

18print"start"

19try:

e("rezkzh=(%s)"%i)

21xm=ne()[0]

22print"Nameis"+xm

23driver=mJS(executable_path='D:')

(url)

_element_by_id('zkzh').nd_keys(i)

_element_by_id('xm').nd_keys(xm)

_elements_by_tag_name('form')[1].submit()

_page_load_timeout(10)

29leibie=_element_by_xpath("//tr[3]/td[1]").text

30leibie2=str(("utf-8"))

31ss=""

("utf-8")=='英语四级'.decode("utf-8"):

33ss=4

34el:

35ss=6

36#zongfen=_element_by_xpath("//tr[6]/th[1]").text

37#printzongfen

38#print"===="

39chuli=_element_by_xpath("//tr[6]/td[1]").text

40printchuli

41chuli2=str(("utf-8"))

42m=l(r'(w*[0-9]+)w*',chuli2)

43sqltxt="leibie=(%s),zongfen=(%s),tingli=(%s),yuedu=(%s),xiezuo=(%s)WHEREzkzh=(%s)"%(

44ss,m[0],m[1],m[2],m[3],i)

e(sqltxt)

()

47printstr(i)+"finish"

48exceptException,e:

49printe

()

(10)

52kaishi(i)

53

54

55#forj1inrange(12,12):

56forj1inrange(12,12):

57forj2inrange(0,3):

58forj3inrange(0,10):

59j=str(j1)+str(j2)+str(j3)

60ifstr(j2)+str(j3)=="00":

61print"0.0"

62elifstr(j2)+str(j3)=="29":

63kaishi(str(j1)+str(j2)+str(j3))

64j4=str(j1)+"30"

65kaishi(j4)

66el:

67kaishi(j)

68print"END!!!"

()

()

参考资料:

:///u/2420420/blog/489205?fromerr=MX68uajh

:///hearzeus/p/

总结:python的字符串处理细节真的很重要,动不动就输出错误,还有IDE的编码不⼀样,记得还有个系统编码,字符编码,环境编码,数据库编码等等都要⼀致!!!

ps后记:1.这⼏天别⼈各种同学聚会,然⽽,⾃⼰也总是那么“幸运”,中学所碰到的班级对外特活跃特团结的样⼦,但是初中⾼中毕业那么久了,聚会是⼏乎没有过。。。。昨晚梦见了那些

⼈那些事,也不知道他们怎么样了。昨天有⼀篇新闻报道了⼀⼤学⼀宿舍毕业20年,年年聚会的那样⼦真好。

2.对于爱情的烦恼,莫过于明明很喜欢却发现⾃⼰和她完全不是⼀个“世界”的⼈,然后也很少找她说话,再然后就是⽤“嗯”“哦”来回复她的主动聊天,再然后联系越来越少,再然后连门都不

敢出了,怕这个世界,有时虽然也会⾃嘲“活该孤独终⽼”,但是有啥办法呢?过年了,回到家,过着越来越淡的年,看着⼀同长⼤的⼈,吃着⼏⼗年⼀样的菜和饭,难不得矫情⼀下。

本文发布于:2022-11-23 03:47:04,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/3347.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:attain
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图