了解cookie和sessionhtml
- 无状态的http协议python
- 如上图所示,HTTP协议 是无状态的协议,用户浏览服务器上的内容,只须要发送页面请求,服务器返回内容。对于服务器来讲,并不关心,也并不知道是哪一个用户的请求。对于通常浏览性的网页来讲,没有任何问题。
- 可是,如今不少的网站,是须要用户登陆的。以淘宝为例:好比说某个用户想购买一个产品,当点击 “ 购买按钮 ” 时,因为HTTP协议 是无状态的,那对于淘宝来讲,就不知道是哪一个用户操做的。
- 为了实现这种用户标记,服务器就采用了cookie这种机制来识别具体是哪个用户的访问。
web
了解Cookieajax
- 如图,为了实现用户标记,在Http无状态请求的基础之上,咱们须要在请求中携带一些用户信息(好比用户名之类,这些信息是服务器发送到本地浏览器的,可是服务器并不存储这些信息),这就是cookie机制。数据库
- 须要注意的是:cookie信息是保存在本地浏览器里面的,服务器上并不存储相关的信息。 在发送请求时,cookie的这些内容是放在 Http协议中的header 字段中进行传输的。浏览器
- 几乎如今全部的网站都会发送一些 cookie信息过来,当用户请求中携带了cookie信息,服务器就能够知道是哪一个用户的访问了,从而不须要再使用帐户和密码登陆。缓存
- 可是,刚才也提到了,cookie信息是直接放在Http协议的header中进行传输的,看得出来,这是个隐患!一旦别人获取到你的cookie信息(截获请求,或者使用你的电脑),那么他很容易从cookie中分析出你的用户名和密码。为了解决这个隐患,因此有了session机制。
安全
了解session服务器
- 刚才提到了cookie不安全,因此有了session机制。简单来讲(每一个框架都不同,这只是举一个通用的实现策略),整过过程是这样:
- 服务器根据用户名和密码,生成一个session ID,存储到服务器的数据库中。
- 用户登陆访问时,服务器会将对应的session ID发送给用户(本地浏览器)。
- 浏览器会将这个session ID存储到cookie中,做为一个键值项。
- 之后,浏览器每次请求,就会将含有session ID的cookie信息,一块儿发送给服务器。
- 服务器收到请求以后,经过cookie中的session ID,到数据库中去查询,解析出对应的用户名,就知道是哪一个用户的请求了。
cookie
总结
- cookie 在客户端(本地浏览器),session 在服务器端。cookie是一种浏览器本地存储机制。存储在本地浏览器中,和服务器没有关系。每次请求,用户会带上本地cookie的信息。这些cookie信息也是服务器以前发送给浏览器的,或者是用户以前填写的一些信息。
- Cookie有不安全机制。 你不能把全部的用户信息都存在本地,一旦被别人窃取,就知道你的用户名和密码,就会很危险。因此引入了session机制。
- 服务器在发送id时引入了一种session的机制,很简单,就是根据用户名和密码,生成了一段随机的字符串,这段字符串是有过时时间的。
- 必定要注意:session是服务器生成的,存储在服务器的数据库或者文件中,而后把sessionID发送给用户,用户存储在本地cookie中。每次请求时,把这个session ID带给服务器,服务器根据session ID到数据库中去查询,找到是哪一个用户,就能够对用户进行标记了。
- session 的运行依赖 session ID,而 session ID 是存在 cookie 中的,也就是说,若是浏览器禁用了 cookie ,那么同时 session 也会失效(可是能够经过其它方式实现,好比在url中传递 session ID)
- 用户验证这种场合通常会用 session。 所以,维持一个会话的核心就是客户端的惟一标识,即session ID
引入
有些时候,咱们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”我的主页数据)时,若是使用以前requests模块常规操做时,每每达不到咱们想要的目的,例如:
一.基于requests模块的cookie操做
- 结果发现,写入到文件中的数据,不是张三我的页面的数据,而是人人网登录的首页面,why?首先咱们来回顾下cookie的相关概念及做用:
- cookie概念:当用户经过浏览器首次访问一个域名时,访问的web服务器会给客户端发送数据,以保持web服务器与客户端之间的状态保持,这些数据就是cookie。
- cookie做用:咱们在浏览器中,常常涉及到数据的交换,好比你登陆邮箱,登陆一个页面。咱们常常会在此时设置30天内记住我,或者自动登陆选项。那么它们是怎么记录信息的呢,答案就是今天的主角cookie了,Cookie是由HTTP服务器设置的,保存在浏览器中,但HTTP协议是一种无状态协议,在数据交换完毕后,服务器端和客户端的连接就会关闭,每次交换数据都须要创建新的连接。就像咱们去超市买东西,没有积分卡的状况下,咱们买完东西以后,超市没有咱们的任何消费信息,但咱们办了积分卡以后,超市就有了咱们的消费信息。cookie就像是积分卡,能够保存积分,商品就是咱们的信息,超市的系统就像服务器后台,http协议就是交易的过程。
- 通过cookie的相关介绍,其实你已经知道了为何上述案例中爬取到的不是张三我的信息页,而是登陆页面。那应该如何抓取到张三的我的信息页呢?
思路:
1.咱们须要使用爬虫程序对人人网的登陆时的请求进行一次抓取,获取请求中的cookie数据
2.在使用我的信息页的url进行请求时,该请求须要携带 1 中的cookie,只有携带了cookie后,服务器才可识别此次请求的用户信息,方可响应回指定的用户信息页数据
二.基于requests模块的代理操做
代理就是第三方代替本体处理相关事务。例如:生活中的代理:代购,中介,微商......
爬虫中为何须要使用代理
一些网站会有相应的反爬虫措施,例如不少网站会检测某一段时间某个IP的访问次数,若是访问频率太快以致于看起来不像正常访客,它可能就会会禁止这个IP的访问。因此咱们须要设置一些代理IP,每隔一段时间换一个代理IP,就算IP被禁止,依然能够换个IP继续爬取。
代理的分类:
正向代理:代理客户端获取数据。正向代理是为了保护客户端防止被追究责任。
反向代理:代理服务器提供数据。反向代理是为了保护服务器或负责负载均衡。
免费代理ip提供网站
http://www.goubanjia.com/
西祠代理
快代理
代码
三.基于multiprocessing.dummy线程池的数据爬取