爬取网站时经常会遇到需要登录的问题,这是就需要用到模拟登录的相关方法。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信息。以谷歌浏览器为例。

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

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

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

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的时候有难度, 可以来UP主页的Python学习交流圈,里面有学习视频和文件资料,欢迎初学者和想转行的朋友,和我-起交流成长会比自己琢磨更快哦! UP也收藏了一些Python学习的视频教程和Python基础教程,有兴趣的小伙伴可以看看~谢谢阅读!

python爬虫登录有验证码_大神教你用Python爬虫模拟登录带验证码网站相关推荐

  1. python预测未来数据步骤_大神教你用Python预测未来:一文看懂时间序列(值得收藏)...

    所有代码都是用 Python 编写的,并且在 GitHub 上可以看到所有的信息. https://nbviewer.jupyter.org/github/leandrovrabelo/tsmodel ...

  2. python控制电脑唤醒键_大神教你用Python实现Wake On Lan远程开机功能

    导读 这篇文章主要介绍了使用Python实现Wake On Lan远程开机功能,文中给大家补充介绍了python通过wakeonlan唤醒内网电脑开机,非常不错,感兴趣的朋友跟随小编一起学习吧 Wak ...

  3. python玩王者荣耀皮肤碎片怎么获得_大神教你用Python爬取王者荣耀英雄皮肤,不充钱也能入手!...

    前言 临下班前,看到群里有人在讨论用王者农药的一些皮肤作为电脑的壁纸,什么高清的,什么像素稍低的,网上查了一手,也有,但像素都不一样,所以,我就想着,自己去官网直接爬他的高清皮肤就好了,然后就有了这边 ...

  4. win10添加网络打印机_大神教你设置 win10系统安装打印机及驱动的详细方案 -win10使用教程...

    人吃五谷杂粮会生病,电脑也一样.工作运行时间久了就会出现很多的问题,比如win10系统安装打印机及驱动这样的状况,大部分伙计都是第一次看到win10系统安装打印机及驱动这样的事情,想请高手帮忙解决wi ...

  5. python体验课是上纯代码_大陈教初中生学Python,入门体验第二课教学设计,溯本追源...

    第一课我们已经对Python有了一定的了解,那么接下来再通过补充程序.改正程序.编写程序,和学生一起明确变量.常量.表达式.数据类型.赋值语句.输入输出语句.数据类型转换函数.算术运算符等基础知识,溯 ...

  6. python 知乎美女_知乎大神教你用Python爬取网站美女图,附代码!

    都知道Python的抓取功能强大,可以帮我们从海量的数据中爬取所需要的进行分析.下面,就给大家分享知乎大神怎么用Python爬取高颜值美女! 1.数据源 知乎话题『美女』下所有问题中回答所出现的图片 ...

  7. python 相关性检验怎么计算p值_收藏 | 大神教你用Python预测未来:一文看懂时间序列...

    (由Python大本营付费下载自视觉中国) 作者 |  Leandro Rabelo 译者 | 李洁 整理 | Lemonbit 出品 | Python数据之道 本文内容较长,较为详细的阐述了进行时间 ...

  8. python绘画酷炫图片_【一点资讯】教程 | 中国酷炫地图,大神教你用Python一边爬一边画 www.yidianzixun.com...

    前言我只说一句,台湾是中华人民共和国不可分割的领土! 先来聊聊为什么做数据分析一定要用Python或R语言.编程语言这么多种,Java, PHP都很成熟,但是为什么在最近热火的数据分析领域,很多人选择 ...

  9. python中如何移动图形工作站_六招教你用Python分分钟构建好玩的深度学习应用

    原标题:六招教你用Python分分钟构建好玩的深度学习应用 导读]深度学习是近来数据科学中研究和讨论最多的话题.得益于深度学习的发展,数据科学在近期得到了重大突破,深度学习也因此得到了很多关注.据预测 ...

最新文章

  1. WPF判断两个时间大小避免误差
  2. android项目获得所有运行程序
  3. 忽略并存在数据损坏风险_内部审计快速启动数据分析的6个关键点
  4. C++中自定义比较函数和重载运算符总结
  5. PHP管理员登陆、验证与添加(前端验证)
  6. birt脚本for循环_Shell脚本编程2 for循环/while循环
  7. 云炬Android开发笔记 3-2字体图标库集成与封装
  8. urllib设置debuglevel打开调试开关
  9. ExecutorService- Future - Java多线程编程
  10. Python2 包的安装
  11. eclipse下生成Java类图和时序图,生成UML图
  12. Spring事务总结(一) 内部调用事务失效、异常回滚
  13. Android开发笔记(六十六)自定义对话框
  14. Node.js Express+Mongodb 项目实战
  15. python线程监控_一日一技:Python多线程的事件监控
  16. GridView中BoundField重复绑定数据
  17. 遇到网络问题,要逐段排查
  18. android音乐播放器歌词乱码,手机听歌显示乱码 没歌词 教你如何一键解决
  19. GDI+学习及代码总结之------文本与字体
  20. narwal机器人_首款全自动扫拖一体机器人Narwal云鲸,彻底解放双手

热门文章

  1. 限时团购,6.5折:《C# 7.0 核心技术指南》
  2. .NET Core 3.0之深入源码理解Kestrel的集成与应用(一)
  3. Docker最全教程之MySQL容器化 (二十五)
  4. Entity Framework 的一些性能建议
  5. 调试.NET CORE代码
  6. 使用SonarCloud对.NET Core项目进行静态代码分析
  7. .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
  8. Vue保持用户登录及权限控制
  9. java获取tomcat目录结构_Tomcat目录结构详解
  10. Andorid与webView交互,获取webView选中文字,兼容了iframe