Python爬虫学习--Python爬虫模拟登录带验证码网站
小职 2021-08-24 来源 :马哥Linux运维 阅读 561 评论 0

摘要:本篇主要介绍了Python爬虫学习--Python爬虫模拟登录带验证码网站,通过具体的内容展现,希望对Python爬虫的学习有一定的帮助。

本篇主要介绍了Python爬虫学习--Python爬虫模拟登录带验证码网站,通过具体的内容展现,希望对Python爬虫的学习有一定的帮助。

Python爬虫学习--Python爬虫模拟登录带验证码网站


爬取网站时经常会遇到需要登录的问题,这是就需要用到模拟登录的相关方法。python提供了强大的url库,想做到这个并不难。这里以登录学校教务系统为例,做一个简单的例子。


首先得明白cookie的作用,cookie是某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据。因此我们需要用Cookielib模块来保持网站的cookie。

 

可以发现这个验证码是动态更新的每次打开都不一样,一般这种验证码和cookie是同步的。其次想识别验证码肯定是吃力不讨好的事,因此我们的思路是首先访问验证码页面,保存验证码、获取cookie用于登录,然后再直接向登录地址post数据。

 

首先通过抓包工具或者火狐或者谷歌浏览器分析登录页面需要post的request和header信息。以谷歌浏览器为例。

 Python爬虫学习--Python爬虫模拟登录带验证码网站

 

 Python爬虫学习--Python爬虫模拟登录带验证码网站

 

 

其中需要提交的表单数据中txtUserName和TextBox2分别用户名和密码。

 

现在直接到关键部分

 

上代码!!

 

import urllib2  

import cookielib  

import urllib

import re  

import sys  

'''模拟登录'''  

reload(sys)  

sys.setdefaultencoding("utf-8")  

# 防止中文报错  

CaptchaUrl = "//202.115.80.153/CheckCode.aspx"  

PostUrl = "//202.115.80.153/default2.aspx"  

# 验证码地址和post地址  

cookie = cookielib.CookieJar()  

handler = urllib2.HTTPCookieProcessor(cookie)  

opener = urllib2.build_opener(handler)  

# 将cookies绑定到一个opener cookie由cookielib自动管理  

username = 'username'  

password = 'password123'  

# 用户名和密码  

picture = opener.open(CaptchaUrl).read()  

# 用openr访问验证码地址,获取cookie  

local = open('e:/image.jpg', 'wb')  

local.write(picture)  

local.close()  

# 保存验证码到本地  

SecretCode = raw_input('输入验证码:')

# 打开保存的验证码图片 输入  

postData = {  

'__VIEWSTATE': 'dDwyODE2NTM0OTg7Oz6pH0TWZk5t0lupp/tlA1L+rmL83g==',  

'txtUserName': username,  

'TextBox2': password,  

'txtSecretCode': SecretCode,  

'RadioButtonList1': '学生',  

'Button1': '',  

'lbLanguage': '',  

'hidPdrs': '',  

'hidsc': '',  

}  

# 根据抓包信息 构造表单  

headers = {  

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',  

'Accept-Language': 'zh-CN,zh;q=0.8',  

'Connection': 'keep-alive',  

'Content-Type': 'application/x-www-form-urlencoded',  

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36',  

}  

# 根据抓包信息 构造headers  

data = urllib.urlencode(postData)  

# 生成post数据 ?key1=value1&key2=value2的形式  

request = urllib2.Request(PostUrl, data, headers)  

# 构造request请求  

try:  

response = opener.open(request)  

result = response.read().decode('gb2312')  

# 由于该网页是gb2312的编码,所以需要解码  

print result  

# 打印登录后的页面  

except urllib2.HTTPError, e:  

print e.code  

# 利用之前存有cookie的opener登录页面

登录成功后便可以利用该openr访问其他需要登录才能访问的页面。


我是小职,记得找我

✅ 解锁高薪工作

✅ 免费获取基础课程·答疑解惑·职业测评

Python爬虫学习--Python爬虫模拟登录带验证码网站

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程