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抓取中文网页的方法
Jul 28 Python
python学习之第三方包安装方法(两种方法)
Jul 30 Python
Python对文件操作知识汇总
May 15 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
Nov 24 Python
python将一组数分成每3个一组的实例
Nov 14 Python
三个python爬虫项目实例代码
Dec 28 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
Feb 12 Python
Pytorch转onnx、torchscript方式
May 25 Python
Django视图、传参和forms验证操作
Jul 15 Python
通过实例简单了解python yield使用方法
Aug 06 Python
python通过函数名调用函数的几种场景
Sep 23 Python
简单介绍Python的第三方库yaml
Jun 18 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
为查询结果建立向后/向前按钮
2006/10/09 PHP
php与paypal整合方法
2010/11/28 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
PHP闭包函数详解
2016/02/13 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
在jQuery 1.5中使用deferred对象的代码(翻译)
2011/03/10 Javascript
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
jQuery1.6 使用方法二
2011/11/23 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
2014/10/11 Javascript
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
js 打开新页面在屏幕中间的实现方法
2016/11/02 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
python图像和办公文档处理总结
2019/05/28 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
python3的数据类型及数据类型转换实例详解
2019/08/20 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
德国足球商店:OUTFITTER
2019/05/06 全球购物
部队万能检讨书
2014/02/20 职场文书
导游词之吉林吉塔
2019/11/11 职场文书
springboot中一些比较常用的注解总结
2021/06/11 Java/Android
Javascript 解构赋值详情
2021/11/17 Javascript
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS