python动态⽹页爬取——四六级成绩批量爬取
需求:
四六级成绩查询⽹站我所知道的有两个:学信⽹(/cet/)和99宿舍(/),这两个⽹站采⽤的都是动态⽹页。我使⽤的是学信⽹,好了,⽹
站截图如下:
⽹站的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
由图中可以看出表单提交的链接为/cet/query,即:/cet/query,好了,填写表单和结果如下:
但是,点击查看源代码之后发现,没有成绩,即代码仍是上⾯那个,之后按F12查看代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
该代码显⽰了成绩,可以知道,该⽹站使⽤的是动态⽹页,⽤的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小时内删除。
留言与评论(共有 0 条评论) |