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之关于类的初步认识
Oct 11 Python
python多线程用法实例详解
Jan 15 Python
fastcgi文件读取漏洞之python扫描脚本
Apr 23 Python
Python使用pylab库实现画线功能的方法详解
Jun 08 Python
python模块之paramiko实例代码
Jan 31 Python
用Python+OpenCV对比图像质量的几种方法
Jul 15 Python
python中的反斜杠问题深入讲解
Aug 12 Python
如何基于pythonnet调用halcon脚本
Jan 20 Python
tensorflow 自定义损失函数示例代码
Feb 05 Python
python实现字符串和数字拼接
Mar 02 Python
python生成word合同的实例方法
Jan 12 Python
单身狗福利?Python爬取某婚恋网征婚数据
Jun 03 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 中include()与require()的对比
2006/10/09 PHP
PHPMailer发送HTML内容、带附件的邮件实例
2014/07/01 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
学习YUI.Ext 第三天
2007/03/10 Javascript
JavaScript this 深入理解
2009/07/30 Javascript
jQuery EasyUI 中文API Layout(Tabs)
2010/04/27 Javascript
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
jquery.validate的使用说明介绍
2013/11/12 Javascript
浅谈JavaScript实现面向对象中的类
2014/12/09 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
2016/06/06 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
vue axios登录请求拦截器
2018/04/02 Javascript
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
2019/03/15 Javascript
详解小程序用户登录状态检查与更新实例
2019/05/15 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
2019/09/18 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
代码详解django中数据库设置
2019/01/28 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
Python的pygame安装教程详解
2020/02/10 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
Python自动发送和收取邮件的方法
2020/08/12 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
美国孩之宝玩具官网:Hasbro Pulse
2019/06/24 全球购物
意大利在线药房:Farmacia Loreto Gallo
2019/08/09 全球购物
大学自我鉴定范文
2013/12/26 职场文书
英语自我评价范文
2014/01/24 职场文书
消防安全责任书范本
2014/04/15 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
对Keras自带Loss Function的深入研究
2021/05/25 Python