前言:

什么是cookie?

Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的。那么我们可以利用Urllib库保存我们登录的Cookie,然后再抓取其他页面,这样就达到了我们的目的。


一、Urllib库简介

Urllib是python内置的HTTP请求库,官方地址:https://docs.python.org/3/library/urllib.html

包括以下模块:

>>>urllib.request 请求模块

>>>urllib.error 异常处理模块

>>>urllib.parse url解析模块

>>>urllib.robotparser robots.txt解析模块

二、urllib.request.urlopen介绍

uurlopen一般常用的有三个参数,它的参数如下:

urllib.requeset.urlopen(url,data,timeout)

简单的例子:

1、url参数的使用(请求的URL)

response = urllib.request.urlopen('http://www.baidu.com')

2、data参数的使用(以post请求方式请求)

data= bytes(urllib.parse.urlencode({'word':'hello'}), encoding='utf8')

response= urllib.request.urlopen('http://www.baidu.com/post', data=data)

3、timeout参数的使用(请求设置一个超时时间,而不是让程序一直在等待结果)

response= urllib.request.urlopen('http://www.baidu.com/get', timeout=)

三、构造Requset

1、数据传送POST和GET(举例说明:此处列举登录的请求,定义一个字典为values,参数为:email和password,然后利用urllib.parse.urlencode方法将字典编码,命名为data,构建request时传入两个参数:url、data。运行程序,即可实现登陆。)

GET方式:直接以链接形式访问,链接中包含了所有的参数。

LOGIN_URL= "http://*******/postLogin/" values={'email':'*******@***com','password':'****'} data=urllib.parse.urlencode(values).encode() geturl = LOGIN_URL+ "?"+data request = urllib.request.Request(geturl)

POST方式:上面说的data参数就是用在这里的,我们传送的数据就是这个参数data。

LOGIN_URL='http://******/postLogin/'

values={'email':'*******@***.com','password':'*****'}

data=urllib.parse.urlencode(values).encode()

request=urllib.request.Request(URL,data)

2、设置Headers(有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性)

 
上图可以看到该请求的headers,这个头中包含了许多信息:Cache、Client、Transport等等。其中,agent就是请求的身份,如果没有写入请求身份,那么服务器不一定会响应,所以可以在headers中设置agent。

举例:(这个例子只是说明了怎样设置headers)

user_agent = r'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0'

headers={'User-Agent':user_agent,'Connection':'keep-alive'}

request=urllib.request.Request(URL,data,headers)

四、使用cookie登录

1、获取登录网址

浏览器输入需要登录的网址:'http://*****/login'(注意:这个并非其真实站点登录网址),使用抓包工具fiddler抓包(其他工具也可)找到登录后看到的request。

此处确定需要登录的网址为:'http://*****/postLogin/'

 

2、查看要传送的post数据

找到登录后的request中有webforms的信息,会列出登录要用的post数据,包括Email,password,auth。

 
3、查看headers信息

找到登录后看到的request的headers信息,找出User-Agent设置、connection设置等

 

4、开始编码,使用cookie登录该网站

import urllib.error, urllib.request, urllib.parse
import http.cookiejar LOGIN_URL = 'http://******/postLogin'
#get_url为使用cookie所登陆的网址,该网址必须先登录才可
get_url = 'https://*****/pending'
values = {'email':'*****','password':'******','auth':'admin'}
postdata = urllib.parse.urlencode(values).encode()
user_agent = r'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36' \
r' (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36'
headers = {'User-Agent':user_agent, 'Connection':'keep-alive'}
#将cookie保存在本地,并命名为cookie.txt
cookie_filename = 'cookie.txt'
cookie_aff = http.cookiejar.MozillaCookieJar(cookie_filename)
handler = urllib.request.HTTPCookieProcessor(cookie_aff)
opener = urllib.request.build_opener(handler) request = urllib.request.Request(LOGIN_URL, postdata, headers)
try:
response = opener.open(request)
except urllib.error.URLError as e:
print(e.reason) cookie_aff.save(ignore_discard=True, ignore_expires=True) for item in cookie_aff:
print('Name ='+ item.name)
print('Value ='+ item.value)
#使用cookie登陆get_url
get_request = urllib.request.Request(get_url,headers=headers)
get_response = opener.open(get_request)
print(get_response.read().decode())

5、反复使用cookie登录

(上面代码中我们保存cookie到本地了,以下代码我们能够直接从文件导入cookie进行登录,不用再构建request了)

import urllib.request, urllib.parse
import http.cookiejar get_url = 'https://******/pending'
cookie_filename = 'cookie.txt'
cookie_aff = http.cookiejar.MozillaCookieJar(cookie_filename)
cookie_aff.load(cookie_filename,ignore_discard=True,ignore_expires=True) handler = urllib.request.HTTPCookieProcessor(cookie_aff)
opener = urllib.request.build_opener(handler)
#使用cookie登陆get_url
get_request = urllib.request.Request(get_url)
get_response = opener.open(get_request)
print(get_response.read().decode())

以上

python爬虫-使用cookie登录的更多相关文章

  1. python爬虫+使用cookie登录豆瓣

    2017-10-09 19:06:22 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言: 先获得cookie,然后自动登录豆瓣和新浪微博 系统环境: 64位win10系统,同时装pytho ...

  2. Python爬虫-百度模拟登录(二)

    上一篇-Python爬虫-百度模拟登录(一) 接上一篇的继续 参数 codestring codestring jxG9506c1811b44e2fd0220153643013f7e6b1898075 ...

  3. Python爬虫之模拟登录微信wechat

    不知何时,微信已经成为我们不可缺少的一部分了,我们的社交圈.关注的新闻或是公众号.还有个人信息或是隐私都被绑定在了一起.既然它这么重要,如果我们可以利用爬虫模拟登录,是不是就意味着我们可以获取这些信息 ...

  4. Python爬虫-百度模拟登录(一)

    千呼万唤屎出来呀,百度模拟登录终于要呈现在大家眼前了,最近比较忙,晚上又得早点休息,这篇文章写了好几天才完成.这个成功以后,我打算试试百度网盘的其他接口实现.看看能不能把服务器文件上传到网盘,好歹也有 ...

  5. python爬虫-知乎登录

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- ''' Required - requests (必须) - pillow (可选) ''' import ...

  6. python爬虫之Cookie

    由于http协议是无状态协议(假如登录成功,当访问该网站的其他网页时,登录状态消失),此时,需要将会话信息保存起来,通过cookie或者session的方式 cookie 将所有的回话信息保存在客户端 ...

  7. Python爬虫之Cookie和Session

    关于cookie和session估计很多程序员面试的时候都会被问到,这两个概念在写web以及爬虫中都会涉及,并且两者可能很多人直接回答也不好说的特别清楚,所以整理这样一篇文章,也帮助自己加深理解 什么 ...

  8. Python爬虫之关于登录那些事

    常见的登录方式有以下两种: 查看登录页面,csrf,cookie;授权:cookie 直接发送post请求,获取cookie 上面只是简单的描述,下面是详细的针对两种登录方式的时候爬虫的处理方法 第一 ...

  9. Python 爬虫之模拟登录

    最近应朋友要求,帮忙爬取了小红书创作平台的数据,感觉整个过程很有意思,因此记录一下.在这之前自己没怎么爬过需要账户登录的网站数据,所以刚开始去看小红书的登录认证时一头雾水,等到一步步走下来,最终成功, ...

随机推荐

  1. Docker容器学习与分享11

    容器的数据存储 容器在删除之后,里面所有的数据都会丢失,如果其他程序需要用到某一部分的数据那就没办法了. 所以可以将容器内的数据存储到容器之外,比如存储到宿主机内.(Docker提供了好几种方法) 将 ...

  2. swift是强类型语言

    swift是强类型语言 所有的变量必须先声明,后使用: 指定类型的变量只能接收类型与之匹配的值. 强类型:变量的类型明确,变量的赋值必须符合类型约束:变量的类型转化必须显式进行. 强类型:类型规则的制 ...

  3. CF838D Airplane Arrangements

    传送门:https://www.luogu.org/problemnew/show/CF838D 这道题反正我自己想是毫无头绪,最后还是听了肖大佬的做法. 因为题中说乘客可以从前后门进来,所以我们可以 ...

  4. Linux命令——文件和目录管理

    Linux命令--文件和目录管理 基本命令 命令ls 作用:显示目录下的文件和文件夹 说明:默认显示当前目录,可跟路径参数 参数:-a,显示隐藏目录 参数:-l,显示文件权限 参数:-d,显示文件最后 ...

  5. 如何利用Grunt生成对应的Source Map文件,线上代码压缩使用chrome浏览器便于调式

    如何利用Grunt生成对应的Source Map文件,线上代码压缩使用chrome浏览器便于调式 首先我们来说说为何要生成sourceMap文件呢?简单的说,sourceMap是为了压缩后的代码调式提 ...

  6. css样式匹配苹果个型号手机

    /*适配苹果X*/ @media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-devic ...

  7. 学习ASP.NET Core,你必须了解无处不在的“依赖注入”(转载)

    ASP.NET Core的核心是通过一个Server和若干注册的Middleware构成的管道,不论是管道自身的构建,还是Server和Middleware自身的实现,以及构建在这个管道的应用,都需要 ...

  8. cocos2d-x 2.2.3 建工程

    2.2以后不再使用模板安装了. 打开终端,进入cocos2d-x目录下的tools/project-creator,执行命令 ./create_project.py -project [项目名] -p ...

  9. WC 2019 游记 - 败者之低语

    败者之低语 WC 2019 游记 Day -1 看了一圈PKU和THU的题,感觉图像识别真有意思... 感觉非常讲道理,pku还是比thu简单一点的... 听说高二414在thu没有进面试? 震惊!( ...

  10. 关于docker构建镜像

    今天正好看到这一块了,记录一下,希望可以帮助到大家. 构建Dockerfile 先来看一个示例: --------------------------------------------------- ...