python爬虫之urllib库(三)
python爬虫之urllib库(三)
urllib库
访问网页都是通过HTTP协议进行的,而HTTP协议是一种无状态的协议,即记不住来者何人。举个栗子,天猫上买东西,需要先登录天猫账号进入主页,再去选择商品。HTTP的无状态性表现在,登录账号以后进入主页,再进入商品页面的时候,你又必须重新登录。这就是HTTP协议的无状态性,你通过HTTP发送请求,服务器接收的当前请求,处理后让你进入主页,当你选择商品要进入商品页面的时候,服务器就又不认识你是谁了,只会问:来者何人?来,登录表单再发你,填吧。那现在根本不是我说的这种情况,现在我打开天猫,登录一次到shopping完成,都没有再次login,这说明了存在某种东西在帮助HTTP记着来者的身份,某种东西就是Cookie+Session或者Token!
Session
当客户端向服务器发送登录HTTP请求时,服务器会使用Session把用户信息临时保存在服务器端,保存的同时会生成一个身份标识,即SessionID。服务器把SessionID发给客户端,告诉客户端:“这段时间这就是你来我这儿的门卡”,客户端保存着它的门卡,后面每一次请求都带着“门卡”访问服务器,服务器也通过“门卡”记住了客户端。用户注销了网站登录,那Session自然也会销毁了。
Cookie
当客户端向服务器发送登录HTTP请求时,服务器会在HTTP响应头headers中设置Set-Cookie首部信息,服务器的意思就是告诉客户端:“你按照一定规范把你用户信息保存在你那吧,以后再来我这儿带给我看你存的东西就成了”,客户端接收HTTP响应以后,看到服务器在响应中的Set-Cookie信息,明白了服务器的意思,以文本形式保存了用户信息等,在以后的每一次请求中,客户端发送的HTTP请求都会在headers中添加Cookie首部信息,告诉服务器我是带着我的用户信息来的,那自然服务器就记住了客户端。
Cookie+Session
前面提到了Session中会产生一个SessionID来作为身份验证,Session会把用户信息保存在服务器;Cookie是把用户信息保存在客户端,以Cookie保存的用户信息作为身份验证。Cookie+Session就是Cookie在客户端保存的不再是用户信息那么大的数据了,只保存SessionID,以后Cookie就带着SessionID去访问服务器就OK。从客户端和服务端来说是减轻了客户端的压力。
Token
当客户端向服务器发送登录HTTP请求,服务器会把用户信息生成一个Token,并且使用加密算法为Token生成一个签名,然后把带签名的Token信息发送给客户端保存起来。客户端后面的请求都会在HTTP请求headers中加上Token信息,服务器接收到以后先解密Token的签名,然后就记住了客户端。
Cookiejar
为爬虫添加Cookie是为了使爬取网站内多个网页内容时,可以保持登录状态持续爬取。python2中使用Cookielib库添加Cookie,而python3使用Cookiejar处理。
不使用Cookie的情况
import urllib.request
import urllib.parse url = 'https://www.yaozh.com/login'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'
}
data = {
'username': 'snow_1',
'pwd': 'bushizhendemima'
}
post_data = urllib.parse.urlencode(data).encode('utf-8') req = urllib.request.Request(url, data=post_data,headers=headers)
rep = urllib.request.urlopen(req).read()
with open('1.html', 'wb') as f:
f.write(rep) url_next = 'https://www.yaozh.com/' req_next = urllib.request.Request(url, data=post_data,headers=headers)
rep_next = urllib.request.urlopen(req_next).read()
with open('2.html', 'wb') as f:
f.write(rep_next)
使用Cookie的情况
import urllib.request
import urllib.parse
import http.cookiejar url = 'https://www.yaozh.com/login'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'
}
data = {
'username': 'snow_1',
'pwd': 'bushizhendemima'
}
post_data = urllib.parse.urlencode(data).encode('utf-8') req = urllib.request.Request(url, data=post_data,headers=headers)
cookie = http.cookiejar.CookieJar() # 实例CookieJar对象
processor = urllib.request.HTTPCookieProcessor(cookie) # 创建cookie处理器
opener = urllib.request.build_opener(processor) # 构建opener对象
urllib.request.install_opener(opener) # 安装openner为全局 rep = opener.open(req).read()
with open('1.html', 'wb') as f:
f.write(rep) url_next = 'https://www.yaozh.com/' rep_next = urllib.request.urlopen(url_next).read()
with open('2.html', 'wb') as f:
f.write(rep_next)
使用Cookie就不需要在多次请求都添加数据,即Request类的data属性。
python爬虫之urllib库(三)的更多相关文章
- python爬虫之urllib库(一)
python爬虫之urllib库(一) urllib库 urllib库是python提供的一种用于操作URL的模块,python2中是urllib和urllib2两个库文件,python3中整合在了u ...
- python爬虫之urllib库(二)
python爬虫之urllib库(二) urllib库 超时设置 网页长时间无法响应的,系统会判断网页超时,无法打开网页.对于爬虫而言,我们作为网页的访问者,不能一直等着服务器给我们返回错误信息,耗费 ...
- python 爬虫之 urllib库
文章更新于:2020-03-02 注:代码来自老师授课用样例. 一.初识 urllib 库 在 python2.x 版本,urllib 与urllib2 是两个库,在 python3.x 版本,二者合 ...
- python爬虫之urllib库介绍
一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...
- Python 爬虫之urllib库的使用
urllib库 urllib库是Python中一个最基本的网络请求库.可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据. urlopen函数: 在Python3的urlli ...
- Python爬虫入门 Urllib库的基本使用
1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它是一段HTML代码,加 JS.CSS ...
- python爬虫入门urllib库的使用
urllib库的使用,非常简单. import urllib2 response = urllib2.urlopen("http://www.baidu.com") print r ...
- python爬虫之urllib库
请求库 urllib urllib主要分为几个部分 urllib.request 发送请求urllib.error 处理请求过程中出现的异常urllib.parse 处理urlurllib.robot ...
- Python爬虫系列-Urllib库详解
Urllib库详解 Python内置的Http请求库: * urllib.request 请求模块 * urllib.error 异常处理模块 * urllib.parse url解析模块 * url ...
随机推荐
- [operator]jenkins+gitlab/Webhook自动构建发布
开发同事在提交代码到gitlab后,需要使用jenkins对代码进行构建,每次都需要手动操作会很繁琐,如果工程很大,那么也会浪费时间,gitlab的webhook功能,可以在代码提交后自动调用jenk ...
- [GO]断言
使用if实现断言 package main import "fmt" type Student struct { name string id int } func main() ...
- 直接导入用户信息到discuz ucenter.
上一篇帖子: 直接导入帖子到Discuz 论坛数据库. 结束时说要写一篇导入用户的帖子, 一直没时间, 但是咱不能做太监,不是? 所以今天赶快补上. 在做discuz整合或者迁移是, 很多人可能遇到相 ...
- requirejs 配制
baseUrl: 用来配制动态加载脚本时,脚本文件的起始位置,此属性可以指定值,也可以由 requirejs 自动计算出值: 1:不进行任何配制: 假如 a.html 中引用 require.js 文 ...
- PLSQL Developer 13.0.0.1883 注册码
PLSQL Developer 13.0.0.1883 注册码 product code: 4vkjwhfeh3ufnqnmpr9brvcuyujrx3n3le serial Number:22695 ...
- path的用法和所遇错误
首先上源代码: def _path(route, view, kwargs=None, name=None, Pattern=None): if isinstance(view, (list, tup ...
- jqGrid-基础篇
jqGrid 是一个用来显示网格数据的jQuery插件,通过使用jqGrid可以轻松实现前端页面与后台数据的ajax异步通信. 一.jqGrid特性 基于jquery UI主题,开发者可以根据客户要 ...
- python 导入模块与使用
学习python之前一定要了解导入模块是怎么导入的,至少在看代码时不知道能很快的了解别人写的东西是哪里来. Python默认仅安装部分基础或核心模块,启动时也仅加载了基础模块,在需要是再显式的加载其他 ...
- Mysql创建、删除用户[转]
MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 登录MYSQL: @>mysql -u root -p @>密码 ...
- NVIDIA | 一种重建照片的 AI 图像技术
简评:或许可以称之为「擦擦乐」~ 建议大家看看视频示例 ~ 前几天,NVIDIA 的研究人员介绍了一种新的 深度学习 方法,使用该方法可以重建缺失像素的图像内容. 这种方法被称为「image inpa ...