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

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

e6fc8f9803bfb5b239c1c88e8ecaa766e393533e.png

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

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

现在直接到关键部分 上代码!!4aa545dccf7de8d4a93c2b2b8e3265ac0a26d216.png

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登录页面4aa545dccf7de8d4a93c2b2b8e3265ac0a26d216.png

登录成功后便可以利用该openr访问其他需要登录才能访问的页面。02db465212d3c374a43c60fa2625cc1caeaab796.png

学习Python编程知识,想要成为一个更加优秀的程序员,或者你学习Python的时候有难度, 可以来UP主页的Python学习交流圈,里面有学习视频和文件资料,欢迎初学者和想转行的朋友,和我-起交流成长会比自己琢磨更快哦! UP也收藏了一些Python学习的视频教程和Python基础教程,有兴趣的小伙伴可以看看~谢谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建失败_号称人人都可编辑的百科词条,创建之路为何屡屡失败?

​作为企业推广的第一步,百科词条可以说是最直观最便捷的了,当我们想要了解一个企业的信息,往往上网查找百科信息,而且百科类的权重是比较高的,都会在搜索结果首页展示。而企业需要做百科词条的原因就是,编…

十个必备的.NET开发小工具(1):Snippet Compiler

作者:James Avery 翻译:lucentoff 出处:http://msdn.microsoft.com/msdnmag/issues/04/07/MustHaveTools/default.aspx 声明:版权属原作者所有,转载请注明出处!本文将介绍下列工具: 代码片段编…

分享一个点赞超过100的漂亮ASP.NET MVC蓝色界面框架

从 陈贞宝 博客中看到一个MVC模板感觉特别漂亮就尝试着分离出来,直接拿来用啦,直接拷贝到自己的常用的代码库里收藏起来,地址是http://www.cnblogs.com/baihmpgy/p/3817613.html 下图是该界面框架的样式。 要使用该界面框架,你可以…

.NET 6 中哈希算法的简化用法

.NET 6 中哈希算法的简化用法Intro微软在 .NET 6 中引入一些更简单的 API 来使用 HMAC 哈希算法(MD5/SHA1/SHA256/SHA384/SHA512)微软的叫法叫做 HMAC One-Shoot method, HMAC 算法在普通的哈希算法基础上增加了一个 key,通过 key 提升了安全性&#xff…

iis 404错误从定向完美方案

is 404错误从定向完美方案 自定义404页 面返回不当状态码如“200”等给网站最终SEO效果带来的不利影响,因此,确保自定义的404错误页面能够返回“404” 状态码是极为重要的,也是网站优化与SEO的基本要求。 HTTP404对 SEO的影响   自定义404错…

python 百度百科 爬虫_python简单爬虫

爬虫真是一件有意思的事儿啊,之前写过爬虫,用的是urllib2、BeautifulSoup实现简单爬虫,scrapy也有实现过。最近想更好的学习爬虫,那么就尽可能的做记录吧。这篇博客就我今天的一个学习过程写写吧。 一 正则表达式 正则表达式是一个…

知乎上这个程序员火了,竟是因为给老板修了一 次U盘

全世界只有3.14 % 的人关注了爆炸吧知识相信很多小伙伴曾经遇到这样的问题软件工程▼知识君陷入沉思都说知乎出人才,于是知识君飞赴知乎希望能得到广大网友的点拨!知乎上有位朋友就分享了他的经验做为一名全栈程序员居然要我修电脑。你以为我会和领导说告…

mysql 批量_mysql LOAD语句批量录入数据

本章的前面讨论如何使用SQL向一个表中插入数据。但是,如果你需要向一个表中添加许多条记录,使用SQL语句输入数据是很不方便的。幸运的是,MySQL提供了一些方法用于批量录入数据,使得向表中添加数据变得容易了。本节以及下一节&…

VS2010 NDoc的插件工具

1、下载Sandcastle Help File Builder: http://www.codeplex.com/SHFB 2、下载sandcastle: http://www.microsoft.com/downloads/details.aspx?FamilyIDe82ea71d-da89-42ee-a715-696e3a4873b2&DisplayLangen 1、先安装sandcastle,然后安…

回到校园

最近一段时间,作息时间调整的原因,有了周六,周日。今天是星期六,下午没有什么事情,就带了本书,重新回到毕业5年的大学,又去上了一节自习!上学的感觉很好呀~~~转载于:https://blog.51…

Abel 分部求和法

本文之所以叫Abel分部求和法而不叫Abel分部求和公式,是因为求和公式有可能形式上有所不同,但是方法确实相同的。 $$\sum_{nM}^{N}a_{n}b_{n} \sum_{nM}^{N} a_{n}B_{n}-\sum_{nM}^{N}a_{n}B_{n-1}$$ 而 $$\sum_{nM}^{N}a_{n}B_{n-1}\sum_{M-1}^{N-1}a_{…

使用Pitcher简化卫语句

什么是卫语句在方法的开头,我们经常会添加一些检查代码,当检查条件为true时立刻从方法中返回。这样的单独检查代码被称为“卫语句”。例如,我们在添加用户时会检查用户名不能为空,年龄必须大于0:public void AddUser(s…

男人的本质需求

1 新的一天也要保持微笑哦2 别拍了!快救我!3 被可爱到了4 通过薯条学习骨折的分类。从左向右依次是:螺旋骨折、斜向骨折、横向骨折、多段骨折和粉碎性骨折。5 高级玩家啊~6 男人的本质需求你点的每个赞,我都认真当成了喜欢

python小甲鱼爬虫妹子_【Python学习日记】B站小甲鱼:爬虫

Web Spider Python 如何访问互联网 URL lib -->urllib URL的一般格式为 protocol://hostname[:port] / /path /[;parameters][?query]#fragment,其中[]为可选项 URL由三部分组成 第一部分是协议 第二部分是存放资源的服务器的域名系统或IP地址(有时…

【转】了解SQL Server触发器及触发器中的事务

引述 首先, 说下我写篇文章的目的,我希望能把我对触发器的理解,分享出来与你一起学习。如果你有对触发器和事务的概念,有些了解,这篇文章,对你来说会是很简单,或能让你更进一步的了解触发器里面…

Java将mysql输出csv_使用Java将大量数据从数据库导出到.csv时出...

我,谢谢您的关注.我想使用Java将大量数据,实际上是大量数据(600万行)导出到.csv文件.该应用程序是使用toplink(ojdbc14)的JPA摆动应用程序.我尝试使用:但是BufferedWriterRandomAccessFile的FileChannel等等,但是尽管我将最大堆大小设置为800m(-Xmx800m),但是内存消…

Oracle interview

Oracle Applications General Questions How can you restrict the access (to oracle apps) to A GROUP OF users using personalization?How do you enable trace/debug in APPS?What are custom events in apps and how to you enable/disable it?What is diagnostics in…

ASP.Net Core Web API 如何返回 File。

咨询区 Jan Kruse&#xff1a;我想在 ASP.Net Web API 中返回 File 文件&#xff0c;我目前的做法是将 Action 返回值设为 HttpResponseMessage&#xff0c;参考代码如下&#xff1a;public async Task<HttpResponseMessage> DownloadAsync(string id) {var response ne…

python导包路径问题_python的导包问题

有事会遇到在python代码中导入包错误问题&#xff0c;本文简单对python包的引入做简单介绍 简单说,我认为python导包一共有3种情况,分别是: 要导的包与当前文件在同一层 要导的包在当前文件的底层(就是与当前文件夹同级的文件夹里) 要导的包在当前文件的上层 1、要导的包与当前…

垃圾代码还能出圈?手把手教你写垃圾代码,从入门到精通!

全世界只有3.14 % 的人关注了爆炸吧知识转自&#xff1a;机器之心参与&#xff1a;思如果说到什么是好代码&#xff0c;我们肯定都能说出一堆规则&#xff0c;例如使用一致的格式和缩进、使用清晰的变量名和方法名、在必要时提供文档与注释、不要过度精简代码等等。但是对于什么…