python爬虫模拟登录(二)----重庆理工大学数字化校园

来源:互联网 发布:续命八丸 知乎 编辑:程序博客网 时间:2024/04/26 03:59

模拟登录重庆理工大学数字化校园

同理登录豆瓣,重理工数字化校园登录过程也较简单,所以不多解释

前期工作同样是在浏览器登录后通过工具获取提交的那些数据表单,然后在源代码中找到这些数据项,并通过正则表达式将他们提取出来,在写程序过程同样遇到了几个问题:
1、cookie的获取失败,因为自己获取cookie时的逻辑或者是对库方法的不熟悉导致的
2、ip代理的实效导致url error无法访问到地址

将问题解决掉啦,这就很舒服,下面直接上源码

# login_i_cqut.py# coding: utf-8# 登录重庆理工大学数字化校园import urlparseimport urllibimport urllib2import cookielibimport reimport webbrowserclass CQUT:    def __init__(self, username, password):        self.loginUrl = 'http://i.cqut.edu.cn/zfca/login'        self.username = username        self.password = password        self.cookies = cookielib.CookieJar()        self.headers = {            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',            'Host': 'i.cqut.edu.cn',            'Referer': 'http://i.cqut.edu.cn/zfca/login',            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0',            'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',            'Content-Type': 'application/x-www-form-urlencoded',            'Content-Length': '221'        }        self.postData = {            'useValidateCode': '',            'isremenberme': '',            'ip': '',            'username': self.username,            'password': self.password,            'losetime': '30',            'lt': '',            '_eventId': 'submit',            'submit1': ''            # j_captcha_response 验证码        }    # 登录主程序    def login(self):        self.EnableCookieAndProxy()  # 使用代理和cookie        useValidateCode, isremenberme, ip, yzmUrl, lt = self.getData()    # 获取表单提交数据        self.postData['useValidateCode'] = useValidateCode        self.postData['isremenberme'] = isremenberme        self.postData['ip'] = ip        self.postData['lt'] = lt        # 如果需要输入验证码        if yzmUrl:            webbrowser.open_new_tab(yzmUrl)   # 打开验证码图片            # 手动输入验证码            yzm = raw_input("请输入浏览器显示的验证码: ")            self.postData['j_captcha_response'] = yzm        data = urllib.urlencode(self.postData)        print data        result = urllib2.urlopen(self.loginUrl, data)        print result.read().decode('gbk')    # 使用代理和添加cookie    def EnableCookieAndProxy(self):        # 添加cookie        cookieSupport = urllib2.HTTPCookieProcessor(self.cookies)        # 添加代理        proxySupport = urllib2.ProxyHandler({'http': '124.88.67.54:80'})  # 使用代理        opener = urllib2.build_opener(proxySupport, cookieSupport, urllib2.HTTPHandler)        urllib2.install_opener(opener)  # 构建对应的opener    def getData(self):        print self.loginUrl        page = urllib2.urlopen(self.loginUrl).read().decode('gbk')        print "first cookie:"        for i in self.cookies:            print i.name, '=', i.value        print page        pattern = re.compile('<input.*?id="useValidateCode".*?value="(.*?)".*?<input.*?id="isremenberme".*?value="(.*?)".*?<input.*?id="ip".*?value="(.*?)".*?<div.*?id="yzm" style="(.*?)">.*?<input.*?id="j_captcha_response".*?<img.*?src="(.*?)".*?>.*?<input type="hidden" name="lt" value="(.*?)"', re.S)        #                                                   1 useValidateCode                                   2 isremenberme                       3 ip                         4 判断有误验证码                                               5 验证码链接                                       6 lt        res = re.search(pattern, page)        # res.group(4) 判断是否有验证码 res.group(5) 验证码链接, res.group(6) lt        if "display" in res.group(4):    # 如果没有验证码            yzmUrl = None        # 验证码链接补充完整        else:            yzmUrl = urlparse.urljoin(self.loginUrl, res.group(5))        print yzmUrl, "lt:", res.group(6).strip()        return res.group(1).strip(), res.group(2).strip(), res.group(3).strip(), yzmUrl, res.group(6).strip()#测试代码cqut = CQUT("这是学号", "这是密码")cqut.login()
0 0
原创粉丝点击