python爬虫之Cookie
由于http协议是无状态协议(假如登录成功,当访问该网站的其他网页时,登录状态消失),此时,需要将会话信息保存起来,通过cookie或者session的方式
cookie
将所有的回话信息保存在客户端
session
将会话信息保存在服务端,但是服务端给客户端发的sessionid信息会保存在客户端的cookie里
Cookie 实战
python3.x Cookiejar python2.x Cookielib
实例演示:
#!/usr/bin/env python
#-*-coding:utf-8-*- import urllib.request
import urllib.parse
import http.cookiejar url = "http://bbs.chinaunix.net/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=LUPvX" postdata = urllib.parse.urlencode({"username":"weisuen","password":"aA123456"}).encode('utf-8') #使用urlencode处理,在设置为utf-8编码 req = urllib.request.Request(url,postdata) #构建request对象 req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3107.4 Safari/537.36") data = urllib.request.urlopen(req).read() #登陆并爬取网页 url2 = "http://bbs.chinaunix.net/" req2 = urllib.request.Request(url2,postdata) req2.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3107.4 Safari/537.36") data2 = urllib.request.urlopen(req2).read() #写入到文件
with open('1.html','wb') as one, open('2.html','wb') as two:
one.write(data)
two.write(data2)
未设置cookie登陆网站
将文件打开,1.html显示内容已经登陆成功,2.html显示没有登陆,这是由于没有设置cookie导致
添加cookie
思路:
A、导入Cookie处理模块http.cookiejar B、使用http.cookiejar.CookieJar()创建CookieJar对象 C、使用HTTPCookieProcessor创建cookie处理器,并以其为参数构建opener对象 D、创建全局默认的opener对象
对以上代码修改为:
#!/usr/bin/env python
#-*-coding:utf-8-*- import urllib.request
import urllib.parse
import http.cookiejar
import sys,json # print (sys.getdefaultencoding()) url = "http://bbs.chinaunix.net/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=LUPvX" postdata = urllib.parse.urlencode({"username":"weisuen","password":"aA123456"}).encode('utf-8') req = urllib.request.Request(url,postdata) req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3107.4 Safari/537.36") #使用http.cookiejar.CookieJar()创建CookieJar对象
cookie_jar = http.cookiejar.CookieJar() ##创建cookieJar对象 #创建opener对象
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie_jar)) ##创建全局默认的opener对象
urllib.request.install_opener(opener) data = opener.open(req).read()
#content = data.read() url2 = "http://bbs.chinaunix.net/"
data2 = urllib.request.urlopen(url2).read() with open('3.html','wb') as one, open('4.html','wb') as two:
one.write(data)
two.write(data2)
创建cookie登陆网站
此时打开3.html和4.html全部在登陆状态
python爬虫之Cookie的更多相关文章
- python爬虫+使用cookie登录豆瓣
2017-10-09 19:06:22 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言: 先获得cookie,然后自动登录豆瓣和新浪微博 系统环境: 64位win10系统,同时装pytho ...
- python爬虫-使用cookie登录
前言: 什么是cookie? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想 ...
- Python爬虫之Cookie和Session
关于cookie和session估计很多程序员面试的时候都会被问到,这两个概念在写web以及爬虫中都会涉及,并且两者可能很多人直接回答也不好说的特别清楚,所以整理这样一篇文章,也帮助自己加深理解 什么 ...
- Python爬虫之cookie的获取、保存和使用【新手必学】
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:huhanghao Cookie,指某些网站为了辨别用户身份.进行ses ...
- 【python爬虫】cookie & session
一.什么是cookie? cookie是指网站为了鉴别用户身份,进行会话跟踪而存储在客户端本地的数据. 二.什么是session? 本来的含义是指有始有终的一些列动作,而在web中,session对象 ...
- Python爬虫教程
Python爬虫(1):基本原理 Python爬虫(2):Requests的基本用法 Python爬虫(3):Requests的高级用法 Python爬虫(4):Beautiful Soup的常用方法 ...
- python爬虫基础16-cookie在爬虫中的应用
Cookie的Python爬虫应用 Cookie是什么 Cookie,有时也用其复数形式 Cookies,英文是饼干的意思.指某些网站为了辨别用户身份.进行 session 跟踪而储存在用户本地终端上 ...
- python爬虫 - Urllib库及cookie的使用
http://blog.csdn.net/pipisorry/article/details/47905781 lz提示一点,python3中urllib包括了py2中的urllib+urllib2. ...
- Python爬虫入门之Cookie的使用
本节我们一起来看一下Cookie的使用. 为什么要使用Cookie呢? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密) 比如说有些网站需要 ...
随机推荐
- 【C/C++】c文件重点总结
c文件重点知识总结 程序文件数据文件--->分文本文件(ASCII文件)和映像文件(二进制文件) .区分是用记事本打开后能否看懂. 用二进制文件读写花费时间少,因为用文本文件需要有一个转换的过程 ...
- 配置 Django
Django项目的设置文件位于项目同名目录下,名叫settings.py.这个模块,集合了整个项目方方面面的设置属性,是项目启动和提供服务的根本保证. 一.简述 settings.py文件本质上是一个 ...
- 数据库MySQL5.7.21win64位安装配置
1,在MySQL官网下载mysql对应版本 https://dev.mysql.com/downloads/mysql/ 2,解压压缩文件到想要的位置 3,配置环境 打开 右键我的电脑-->属 ...
- 【BZOJ2817】[ZJOI2012]波浪(动态规划)
[BZOJ2817][ZJOI2012]波浪(动态规划) 题面 BZOJ 洛谷 题解 首先这个差值最大也就是\(n^2\)级别的. 那么这样子就可以压进状态啦. 我们把这个操作看成一个个加数的操作,按 ...
- [CQOI2017]老C的方块
题目描述 https://www.lydsy.com/JudgeOnline/problem.php?id=4823 题解 观察那四种条件 有没有什么特点? 我们可以把蓝线两边的部分看做两个区域,这样 ...
- Python中的实例方法、classmethod和staticmethod的区别
class NewsPaper(object): # 类属性 __print_times = 0 # 下划线表示私有属性 # 实例方法 def __init__(self, title, conten ...
- 纪中2018暑假培训day1提高b组改题记录
收到意见,认为每天的程序和随笔放在一起写的博客太长了,于是分开整理 day1 模拟赛,看了看提高a组t1的样例就不太想写,于是转而写b组 t1: Description 给定一个n个点m条边的有向图, ...
- [ZJOI2018]历史
[ZJOI2018]历史 最大化access轻重链的切换次数 考虑一个点的贡献,即它交换重儿子的次数 发现这个次数只和它自己ai以及每个儿子的子树次数和有关. 一个关键的事实是: 我们可以自上而下进行 ...
- 再谈 javascript 数组去重
前言 数组去重方法老生常谈,既然是常谈,我也来谈谈 双层循环 也许我们首先想到的是使用 indexOf 来循环判断一遍,但在这个方法之前,让我们先看看最原始的方法: var array = [1,1, ...
- codeblocks: 使用动态链接库(pcre)的配置
说明:在c/c++程序中使用动态链接库, 编译后需要相关的dll文件(如:libpcre-1.dll,libpcreposix-0.dll)才能正常的运行. 2014-06-27