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开发windows GUI程序入门实例
Oct 23 Python
Python中的pass语句使用方法讲解
May 14 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
django之session与分页(实例讲解)
Nov 13 Python
python3监控CentOS磁盘空间脚本
Jun 21 Python
python Flask 装饰器顺序问题解决
Aug 08 Python
浅析python参数的知识点
Dec 10 Python
【python】matplotlib动态显示详解
Apr 11 Python
python将数组n等分的实例
Dec 02 Python
Python try except异常捕获机制原理解析
Apr 18 Python
python实现快速文件格式批量转换的方法
Oct 16 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
Oct 29 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
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
JavaScript中exec函数用法实例分析
2015/06/08 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
深入理解Vue 单向数据流的原理
2017/11/09 Javascript
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
Python中的map、reduce和filter浅析
2014/04/26 Python
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
将pandas.dataframe的数据写入到文件中的方法
2018/12/07 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
基于Python函数和变量名解析
2019/07/19 Python
python list数据等间隔抽取并新建list存储的例子
2019/11/27 Python
python 控制台单行刷新,多行刷新实例
2020/02/19 Python
基于opencv实现简单画板功能
2020/08/02 Python
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
争论的故事教学反思
2014/02/06 职场文书
《跨越海峡的生命桥》教学反思
2014/02/24 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
眼镜促销方案
2014/03/15 职场文书
给学校的建议书范文
2014/05/15 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
员工离职通知函
2015/04/25 职场文书
格列佛游记读书笔记
2015/06/30 职场文书
经典励志格言:每日一句,让你每天充满能量
2019/08/16 职场文书