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


Posted in Python onJanuary 22, 2016

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

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

这个是要登陆的地址 http://202.115.80.153/ 和验证码地址 http://202.115.80.153/CheckCode.aspx

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

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

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

从中可以看出需要post的url并不是访问的页面,而是http://202.115.80.153/default2.aspx,

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

现在直接到关键部分 上代码!!

import urllib2
import cookielib
import urllib
import re
import sys
'''模拟登录'''
reload(sys)
sys.setdefaultencoding("utf-8")
# 防止中文报错
CaptchaUrl = "http://202.115.80.153/CheckCode.aspx"
PostUrl = "http://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 相关文章推荐
Python3中常用的处理时间和实现定时任务的方法的介绍
Apr 07 Python
详解Python程序与服务器连接的WSGI接口
Apr 29 Python
在Django框架中编写Contact表单的教程
Jul 17 Python
解决Python中字符串和数字拼接报错的方法
Oct 23 Python
Python微信公众号开发平台
Jan 25 Python
python的scikit-learn将特征转成one-hot特征的方法
Jul 10 Python
Python装饰器模式定义与用法分析
Aug 06 Python
python hook监听事件详解
Oct 25 Python
python将字符串转换成json的方法小结
Jul 09 Python
Python插入Elasticsearch操作方法解析
Jan 19 Python
python同义词替换的实现(jieba分词)
Jan 21 Python
python GUI计算器的实现
Oct 09 Python
Fiddler如何抓取手机APP数据包
Jan 22 #Python
Python爬虫抓取手机APP的传输数据
Jan 22 #Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 #Python
Python中使用urllib2模块编写爬虫的简单上手示例
Jan 20 #Python
Python模拟百度登录实例详解
Jan 20 #Python
Python的Scrapy爬虫框架简单学习笔记
Jan 20 #Python
使用Python编写爬虫的基本模块及框架使用指南
Jan 20 #Python
You might like
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
jquery ajax中使用jsonp的限制解决方法
2013/11/22 Javascript
js时间日期格式化封装函数
2014/12/02 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
微信小程序中换行空格(多个空格)写法详解
2018/07/10 Javascript
详解webpack打包后如何调试的方法步骤
2018/11/07 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
JS localStorage存储对象,sessionStorage存储数组对象操作示例
2020/02/15 Javascript
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
2018/05/05 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
2019/02/11 Python
Django model select的多种用法详解
2019/07/16 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
西班牙高科技产品购物网站:MejorDeseo
2019/09/08 全球购物
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
酒店办公室文员岗位职责
2013/12/18 职场文书
感恩老师的演讲稿
2014/05/06 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
乡镇群众路线整改落实情况汇报
2014/10/28 职场文书
求职简历自我评价范文
2015/03/10 职场文书
2015年语文教师工作总结
2015/05/25 职场文书
导游词之上饶龟峰
2019/10/25 职场文书
详解Vue的sync修饰符
2021/05/15 Vue.js
python中的3种定义类方法
2021/11/27 Python
Mybatis-Plus 使用 @TableField 自动填充日期
2022/04/26 Java/Android