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 相关文章推荐
python动态加载变量示例分享
Feb 17 Python
Python中的super用法详解
May 28 Python
深入理解Python 关于supper 的 用法和原理
Feb 28 Python
对Python3.6 IDLE常用快捷键介绍
Jul 16 Python
详解django的serializer序列化model几种方法
Oct 16 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
使用python实现简单五子棋游戏
Jun 18 Python
Python交互环境下打印和输入函数的实例内容
Feb 16 Python
django项目中新增app的2种实现方法
Apr 01 Python
Python3爬虫中Splash的知识总结
Jul 10 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
Oct 29 Python
python可视化大屏库big_screen示例详解
Nov 23 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
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
Java File类的常用方法总结
2015/03/18 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
js控住DOM实现发布微博效果
2016/08/30 Javascript
React Router基础使用
2017/01/17 Javascript
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
Python中的rjust()方法使用详解
2015/05/19 Python
matplotlib绘制动画代码示例
2018/01/02 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
python类中super() 的使用解析
2019/12/19 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
构造器Constructor是否可被override?
2013/08/06 面试题
营销与策划应届生求职信
2013/11/04 职场文书
法学专业毕业生自荐信范文
2013/12/18 职场文书
《猫》教学反思
2014/02/26 职场文书
小学毕业寄语大全
2014/04/03 职场文书
装修协议书范本
2014/04/21 职场文书
电台编导求职信
2014/05/06 职场文书
数控机床专业自荐信
2014/05/19 职场文书
应届毕业生求职信
2014/05/26 职场文书
初中优秀教师事迹材料
2014/08/18 职场文书
运动会演讲稿200字
2014/08/25 职场文书
房屋租赁委托书范本
2014/10/04 职场文书