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库(三)的更多相关文章

  1. python爬虫之urllib库(一)

    python爬虫之urllib库(一) urllib库 urllib库是python提供的一种用于操作URL的模块,python2中是urllib和urllib2两个库文件,python3中整合在了u ...

  2. python爬虫之urllib库(二)

    python爬虫之urllib库(二) urllib库 超时设置 网页长时间无法响应的,系统会判断网页超时,无法打开网页.对于爬虫而言,我们作为网页的访问者,不能一直等着服务器给我们返回错误信息,耗费 ...

  3. python 爬虫之 urllib库

    文章更新于:2020-03-02 注:代码来自老师授课用样例. 一.初识 urllib 库 在 python2.x 版本,urllib 与urllib2 是两个库,在 python3.x 版本,二者合 ...

  4. python爬虫之urllib库介绍

    一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...

  5. Python 爬虫之urllib库的使用

    urllib库 urllib库是Python中一个最基本的网络请求库.可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据. urlopen函数: 在Python3的urlli ...

  6. Python爬虫入门 Urllib库的基本使用

    1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它是一段HTML代码,加 JS.CSS ...

  7. python爬虫入门urllib库的使用

    urllib库的使用,非常简单. import urllib2 response = urllib2.urlopen("http://www.baidu.com") print r ...

  8. python爬虫之urllib库

    请求库 urllib urllib主要分为几个部分 urllib.request 发送请求urllib.error 处理请求过程中出现的异常urllib.parse 处理urlurllib.robot ...

  9. Python爬虫系列-Urllib库详解

    Urllib库详解 Python内置的Http请求库: * urllib.request 请求模块 * urllib.error 异常处理模块 * urllib.parse url解析模块 * url ...

随机推荐

  1. 删除 Ceph 的image报rbd: error: image still has watchers

    在Ceph集群日常运维中,管理员可能会遇到有的image删除不了的情况,有一种情况是由于image下有快照信息,只需要先将快照信息清除,然后再删除该image即可,还有一种情况是因为该image仍旧被 ...

  2. SAC学习笔记(一)——SAC安装

    1.软件包申请 地址: http://www.iris.edu/forms/sac_request.htm      其中的表单需要正确认真填写,选择你所需要的系统平台Linux.Mac OS.Sol ...

  3. 编写高质量代码改善C#程序的157个建议——建议74:警惕线程的IsBackground

    建议74:警惕线程的IsBackground 在CLR中,线程分为前台线程和后台线程,即每个线程都有一个IsBackground属性.两者在表现形式上的唯一区别是:如果前台线程不退出,应用程序的进程就 ...

  4. 长时间停留在calculating requirements and dependencies

    如果安装插件的时候,Eclipse花费了很长的时间calculating requirements and dependencies(计算需求和依赖性 )这个问题通常就是在点击安装之后显示“Calcu ...

  5. 洛谷P4234 最小差值生成树(lct动态维护最小生成树)

    题目描述 给定一个标号为从 11 到 nn 的.有 mm 条边的无向图,求边权最大值与最小值的差值最小的生成树. 输入输出格式 输入格式:   第一行两个数 n, mn,m ,表示图的点和边的数量. ...

  6. vc和halcon数据的相互赋值

    // HTuple→VC 数据类型转换 HTuple hTuple = 1234; int i = hTuple[0].I(); // i=1234 long l = hTuple[0].L(); / ...

  7. Delphi 按Esc快捷键退出程序的简单方法

     第一种方法: 在窗体上放一个按钮: 1>.设置按钮的Cancel属性为True: 2>.在按钮的点击事件中写: procedure TForm1.btn1Click(Sender: TO ...

  8. java学习(五)java类继承

    1.制作一个工具类的文档 javadoc -d 目录 -author -version   arrayTool.java 实例: class arrayDemo { public static voi ...

  9. 菜鸟的Xamarin.Forms前行之路——绪言

    作者入门时间不是很久,差不多一年,期间自学的东西比较杂乱,到目前为止,编程方面的知识比较薄弱.之所以做这个系列,也只是因为做了两个月的Xamarin.Forms方面的东西,由于资料和自身实力的原因,过 ...

  10. centos7 minimal 安装mysql

    CentOS 7.3.1611 安装 MySQL 2017年06月08日 23:02:08 阅读数:250   依赖 MySQL 依赖 libaio,所以先要安装 libaio yum search ...