cookielib和urllib2模块相结合模拟网站登录

news/2024/5/17 0:12:34/文章来源:https://blog.csdn.net/weixin_30786657/article/details/97919619
cookielib和urllib2模块相结合模拟网站登录

1.cookielib模块

cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源。例如可以利用 本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送。coiokielib模块用到的对象主要有下面几 个:CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。其中他们的关系如下:

 

2.urllib2模块

说到urllib2模块最强大的部分绝对是它的opener,

urllib2模块的 OpenerDirector 操作类。这是一个管理很多处理类(Handler)的类。而所有这些 Handler 类都对应处理相应的协议,或者特殊功能。分别有下面的处理类:

  • BaseHandler
  • HTTPErrorProcessor
  • HTTPDefaultErrorHandler
  • HTTPRedirectHandler
  • ProxyHandler
  • AbstractBasicAuthHandler
  • HTTPBasicAuthHandler
  • ProxyBasicAuthHandler
  • AbstractDigestAuthHandler
  • ProxyDigestAuthHandler
  • AbstractHTTPHandler
  • HTTPHandler
  • HTTPCookieProcessor
  • UnknownHandler
  • FileHandler
  • FTPHandler
  • CacheFTPHandler

cookielib模块一般与urllib2模块配合使用,主要用在urllib2.build_oper()函数中作为urllib2.HTTPCookieProcessor()的参数。

由此可以使用python模拟网站登录。

先写个获取CookieJar实例的demo:

复制代码
 1 #!/usr/bin/env python  2 #-*-coding:utf-8-*-   4 import urllib  5 import urllib2  6 import cookielib  7  8 #获取Cookiejar对象(存在本机的cookie消息)  9 cookie = cookielib.CookieJar()  10 #自定义opener,并将opener跟CookieJar对象绑定 11 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 12 #安装opener,此后调用urlopen()时都会使用安装过的opener对象  13 urllib2.install_opener(opener)  14  15 url = "http://www.baidu.com"  16 urllib2.urlopen(url)
复制代码

 

然后写个用POST方法来访问网站的方式(用urllib2模拟一起post过程):

复制代码
1 #! /usr/bin/env python  2 #coding=utf-8  3  4 import urllib2  5 import urllib  6 import cookielib  7  8 def login():  9 email = raw_input("请输入用户名:")  10 pwd = raw_input("请输入密码:")  11 data={"email":email,"password":pwd} #登陆用户名和密码 12 post_data=urllib.urlencode(data) #将post消息化成可以让服务器编码的方式  13 cj=cookielib.CookieJar() #获取cookiejar实例 14 opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))  15 #自己设置User-Agent(可用于伪造获取,防止某些网站防ip注入)  16 headers ={"User-agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1"}  17 website = raw_input('请输入网址:') 18 req=urllib2.Request(website,post_data,headers)  19 content=opener.open(req)  20 print content.read() #linux下没有gbk编码,只有utf-8编码  21  22 if __name__ == '__main__': 23 login()
复制代码

 

注意这个例子经过测试,发现只有人人网和开心网之类的网站可以,而像支付宝,百度网盘,甚至是我们学校的教务系统都不能成功登录,就会显示如下的报错消息:

复制代码
Traceback (most recent call last):File "login.py", line 23, in <module> login() File "login.py", line 19, in login content=opener.open(req) File "/usr/lib/python2.7/urllib2.py", line 406, in open response = meth(req, response) File "/usr/lib/python2.7/urllib2.py", line 519, in http_response 'http', request, response, code, msg, hdrs) File "/usr/lib/python2.7/urllib2.py", line 444, in error return self._call_chain(*args) File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain result = func(*args) File "/usr/lib/python2.7/urllib2.py", line 527, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) urllib2.HTTPError: HTTP Error 405: Method Not Allowed
复制代码

可能是这些网站在编写时不接受客户端请求该方法,具体原因我也不知道为什么。而且这个程序不能自动通过有验证码验证的网站,所以纯粹学习它的原理吧。

然后放一下用python模拟登录的几个示例(转自:http://www.nowamagic.net/academy/detail/1302882

复制代码
# -*- coding: utf-8 -*- # !/usr/bin/python import urllib2 import urllib import cookielib import re auth_url = 'http://www.nowamagic.net/' home_url = 'http://www.nowamagic.net/';  # 登陆用户名和密码 data={ "username":"nowamagic", "password":"pass" } # urllib进行编码  post_data=urllib.urlencode(data)  # 发送头信息 headers ={ "Host":"www.nowamagic.net", "Referer": "http://www.nowamagic.net" }  # 初始化一个CookieJar来处理Cookie cookieJar=cookielib.CookieJar() # 实例化一个全局opener  opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar)) # 获取cookie req=urllib2.Request(auth_url,post_data,headers) result = opener.open(req)  # 访问主页 自动带着cookie信息  result = opener.open(home_url)  # 显示结果 print result.read()
复制代码

1. 使用已有的cookie访问网站

复制代码
import cookielib, urllib2ckjar = cookielib.MozillaCookieJar(os.path.join('C:\Documents and Settings\tom\Application Data\Mozilla\Firefox\Profiles\h5m61j1i.default', 'cookies.txt')) req = urllib2.Request(url, postdata, header) req.add_header('User-Agent', \ 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)') opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(ckjar) ) f = opener.open(req) htm = f.read() f.close()
复制代码

2. 访问网站获得cookie,并把获得的cookie保存在cookie文件中

复制代码
import cookielib, urllib2req = urllib2.Request(url, postdata, header) 
req.add_header('User-Agent', \ 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)') ckjar = cookielib.MozillaCookieJar(filename) ckproc = urllib2.HTTPCookieProcessor(ckjar) opener = urllib2.build_opener(ckproc) f = opener.open(req) htm = f.read() f.close() ckjar.save(ignore_discard=True, ignore_expires=True)
复制代码

3. 使用指定的参数生成cookie,并用这个cookie访问网站

复制代码
import cookielib, urllib2cookiejar = cookielib.CookieJar()
urlOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
values = {'redirect':", 'email':'abc@abc.com', 'password':'password', 'rememberme':", 'submit':'OK, Let Me In!'} data = urllib.urlencode(values) request = urllib2.Request(url, data) url = urlOpener.open(request) print url.info() page = url.read() request = urllib2.Request(url) url = urlOpener.open(request) page = url.read() print page
复制代码

另外,补充一下urllib2的方法:

1.geturl():

这个返回获取的真实的URL,这个很有用,因为urlopen(或者opener对象使用的)或许会有重定向。获取的URL或许跟请求URL不同。

URL重定向 (URL redirection,或称网址重定向或网域名称转址),是指当使用者浏览某个网址时,将他导向到另一个网址的技术。常用在把一串很长的网站网址,转成 较短的网址。因为当要传播某网站的网址时,常常因为网址太长,不好记忆;又有可能因为换了网路的免费网页空间,网址又必须要变更,不知情的使用者还以为网 站关闭了。这时就可以用网路上的转址服务了。这个技术使一个网页是可借由不同的统一资源定位符(URL)连结。

 

>>> import urllib2 >>> url = "http://www.baidu.com" >>> req = urllib2.Request(url) >>> response = urllib2.urlopen(req) >>> response.geturl() 'http://www.baidu.com' >>> print response.info() Date: Fri, 28 Mar 2014 03:30:01 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: Close Vary: Accept-Encoding Set-Cookie: BAIDUID=AF7C001FCA87716A52B353C500FC45DB:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com Set-Cookie: BDSVRTM=0; path=/ Set-Cookie: H_PS_PSSID=1466_5225_5288_5723_4261_4759_5659; path=/; domain=.baidu.com P3P: CP=" OTI DSP COR IVA OUR IND COM " Expires: Fri, 28 Mar 2014 03:29:06 GMT Cache-Control: private Server: BWS/1.1 BDPAGETYPE: 1 BDQID: 0xea1372bf0001780d BDUSERID: 0

 

我们可以通过urllib2 默认情况下会针对 HTTP 3XX 返回码自动进行 redirect 动作(URL重定向),无需人工配置。要检测是否发生了 redirect 动作,只要检查一下 Response 的 URL 和 Request 的 URL 是否一致就可以了。

 


import urllib2
my_url = 'http://www.google.cn' response = urllib2.urlopen(my_url) redirected = response.geturl() == my_url print redirected my_url = 'http://rrurl.cn/b1UZuP' response = urllib2.urlopen(my_url) redirected = response.geturl() == my_url print redirected

 

Debug Log

使用 urllib2 时,可以通过下面的方法把 debug Log 打开,这样收发包的内容就会在屏幕上打印出来,方便调试,有时可以省去抓包的工作


import urllib2
httpHandler = urllib2.HTTPHandler(debuglevel=1)
httpsHandler = urllib2.HTTPSHandler(debuglevel=1)
opener = urllib2.build_opener(httpHandler, httpsHandler)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.google.com')

 

基本cookielib和urllib2结合就这些内容,请多多指教!

posted on 2016-12-17 17:12 Kilichko 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/Yemilice/p/6192682.html

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

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

相关文章

网站静态化处理—CSI(5)

讲完了SSI&#xff0c;ESI&#xff0c;下面就要讲讲CSI了 &#xff0c;CSI是浏览器端的动静整合方案&#xff0c;当我文章发表后有朋友就问我&#xff0c;CSI技术是不是就是通过ajax来加载数据啊&#xff0c;我当时的回答只是说你的理解有点片面&#xff0c;那么到底什么是CSI技…

如何在电脑上测试手机网站(全)

如何在电脑上测试手机网站&#xff08;全&#xff09; 原文:如何在电脑上测试手机网站&#xff08;全&#xff09;最近公司要开发网站的移动版&#xff0c;让我准备准备知识&#xff0c;话说本人开发移动网站的经验还真不多&#xff0c;最悲剧的事情就是我的手机是个经典的诺基…

django3.0 web网站实现页面静态化

思考&#xff1a; 网站的首页访问频繁&#xff0c;而且查询数据量大&#xff0c;其中还有大量的循环处理。 问题&#xff1a; 用户访问首页会耗费服务器大量的资源&#xff0c;并且响应数据的效率会大大降低。 解决&#xff1a; 页面静态化 一. 页面静态化介绍 1.为什么…

html5数据分析报告模板,网站数据分析报告模板(做分析报告数据获取最专业的4个网...

通过几年的经验积累&#xff0c;下面小编将带你一起分析一下网站数据的整体流程(举例如下)小编将会以(www.bodao.org.cn)这个网站进行综合分析&#xff0c;我们需要打开一个站长工具tool.chinaz.com或者aizhan.com进行查询&#xff0c;首选对整个网站进行综合判断分析&#xff…

处理解决方案中网站名称为副本名称的方法

如图中所示&#xff0c;我用VS2012编辑器添加一个解决方案[TestSolution],接着我先添加一个网站[Test],然后因为路径选择不对&#xff0c;就把站点文件删除重建&#xff0c;结果就有了上图显示的问题了。大家会不会觉得奇怪&#xff0c;为什么我的物理文件夹名字是 Test,但是解…

《社交网站界面设计(原书第2版)》——3.17 重新登录

3.17 重新登录 是什么 用户加入社区一段时间后就不再使用或者忘记使用你所提供的服务了&#xff08;参见图3-31和图3-32&#xff09;。 何时使用你想将用户重新吸引到网站上。你想要通知用户新功能。如何使用 给用户提供一种方式&#xff0c;让他们可以选择在刚刚注册后就接受…

夺命雷公狗ThinkPHP项目之----企业网站22之网站前台中间层(解决代码冗余)

我们如果这样写代码虽然可以实现头部二级分类的显示&#xff0c;但是如果再别的控制器下那么会出现显示不了。。 如果再加多一段一样的代码也可以实现出一样的效果&#xff1a; 但是这样会导致代码冗余现象&#xff0c;所以我们为了解决这个问题&#xff0c;可以通过一个中间层…

服务架构:一步步构建大型网站架构详细介绍

今天我们来谈谈一个网站一般是如何一步步来构建起系统架构的&#xff0c;虽然我们希望网站一开始就能有一个很好的架构&#xff0c;但马克思告诉我们事物是在发展中不断前 进的&#xff0c;网站架构也是随着业务的扩大、用户的需求不断完善的&#xff0c;下面是一个网站架构逐步…

网站部署到万网

1&#xff1a;从万网申请主机还有域名 2&#xff1a;登陆主机管理平台 3&#xff1a;基础环境设置-〉域名绑定&#xff0c;把买的域名绑定到这个服务器上 4&#xff1a;用FTP把自己的开发好的网站上传到指定的FTP服务器地址&#xff0c;相对于。NET来说&#xff0c;要注意服务器…

个人网站架构设计(三) - 从设计到前端到后台

网站地址&#xff1a;http://barretlee.com 在五月份&#xff0c;写过两篇博客&#xff0c;提到了要给自己做个网站&#xff0c;当时人在实习&#xff0c;没太多的时间&#xff0c;只是把大概的思路捋了一番&#xff0c;顺道也买了个云主机&#xff08;配置比较低&#xff0c;内…

coolwulf的乳腺癌网站介绍和操作方式

文章目录前言一、coolwulf的乳腺癌网站是什么&#xff01;直接说功能可以实现的作业还有前两个点击下都有一个连接&#xff1a;使用前&#xff0c;请了解乳房X光检查的假阳性/假阴性。&#xff08;里面可以看到乳房X光检查对于这个判断也不是过于准确的东西&#xff0c;会存在一…

Web网站的几个并发量级

2019独角兽企业重金招聘Python工程师标准>>> 评价一个网站的“大小”&#xff0c;处于视角的不同&#xff0c;有很多种衡量的方法&#xff0c;类似文章数&#xff0c;页面数之类的数据非常明显&#xff0c;也没有什么可以争议的。但对于并发来说&#xff0c;争议非常…

夺命雷公狗ThinkPHP项目之----企业网站21之网站前台二级分类显示名称(TP自定义函数展示无限极分类)...

我们实现网站二级分类的显示的时候&#xff0c;先要考虑的是直接取出顶级栏目&#xff0c;控制器代码如下所示&#xff1a; <?php namespace Home\Controller; use Think\Controller; class IndexController extends Controller {public function index(){$mod M("Ca…

网站快速成型工具-Element UI

Element UIElement UI1 什么是Element UI&#xff1f;&#xff1f;&#xff1f;&#xff1f;2 搭建环境2.1 创建vue项目2.2 安装 element-ui组件2.3 Element UI 引入3 布局3.1 布局3.2 reset.css3.3 满屏填充4 导航条4.1 需求4.2 导航条4.3 路由4.4 页面刷新导航选中问题5 表格…

SPA、SEO、SSR相关概述与对比

SPA、SEO、SSRSPASEOSSRSPA和SSR对比Nuxt.js定义这三个名词的概念其实是为后面的nuxt.js来做铺垫 SPA 官方定义 SPA&#xff08;single page web application&#xff09;单页 Web 应用&#xff0c;Web 不再是一张张页面&#xff0c;而是一个整体的应用&#xff0c;一个由路由系…

禁止网站被别人通过iframe引用

我想说的如题&#xff0c;其实今天写这篇是出于PPC被人给引用了......这个问题弄的我好不尴尬啊...这种问题有一般有这么几种解决方案&#xff1a;解决方案一&#xff1a;js方法这种方法不可靠&#xff0c;不推荐使用<script type"text/javascript"> if(self …

网站性能优化的三重境界

&#xfeff;&#xfeff;这篇文章是关于网站性能优化体验的&#xff0c;性能优化是一个复杂的话题&#xff0c;牵涉的东西非常多&#xff0c;我只是按照我的理解列出了性能优化整个过程中需要考虑的种种因素。点到为止&#xff0c;包含的内容以浅显的介绍为主&#xff0c;如果…

LAMP网站架构方案分析

&#xfeff;&#xfeff;LAMP&#xff08;Linux-Apache-MySQL-PHP&#xff09;网站架构是目前国际流行的Web框架&#xff0c;该框架包括&#xff1a;Linux操作系统&#xff0c;Apache网络服务器&#xff0c;MySQL数据库&#xff0c;Perl、PHP或者Python编程语言&#xff0c;所…

网站缓存技术总结( ehcache memcache redis)

&#xfeff;&#xfeff;网站技术高速发展的今天&#xff0c;缓存技术已经成为大型网站的一个关键技术&#xff0c;缓存设计好坏直接关系的一个网站访问的速度&#xff0c;以及购置服务器的数量&#xff0c;甚至影响到用户的体验。 网站缓存按照存放的地点不同&#xff0c;可…

Python脚本爬取网站美女照片

上次无意之中看到一个网站&#xff0c;里面全是美女的照片&#xff0c;我就心想&#xff0c;哪天有时间了得把这网站的所有美女照片都得爬下来。今天有时间&#xff0c;写了点代码&#xff0c;爬去了网站的所有照片。附上战果&#xff01;图片实在是太多了&#xff0c;爬半个多…