【金沙澳门官网】Python 爬虫 (一)

作者: 网络编程  发布:2019-08-08

爬:

Session机制

参考链接1
参考链接2-登录那点事

session在web开发语境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器之间保持状态的解决方案。

爬一个网站需要几步?

确定用户的需求

根据需求,寻找网址

读取网页

  1. urllib request

  2. requests

定位并提取数据

  1.  正则
  2. xpath
  3. beautiful soup

存储数据

  1. mysql

  2. redis

  3. 文件存储

 

爬取百度首页:(确定用户需求)

from urllib import request
url = 'http://www.baidu.com'#确定网页
response = request.urlopen(url)#打开网页
html = response.read()#读取网页内容
with open('baidu.html','wb') as f:#将内容存储到本地
    f.write(html)

 

 

 

HTTP协议与状态保持

HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的,好比一个顾客和一个自动售货机或者一个普通的(非会员制)大卖场之间的关系一样。

然而人们很快发现如果能够提供一些按需生成的动态信息会使web变得更加有用,就像给有线电视加上点播功能一样。这种需求一方面迫使HTML逐步添加了表单、脚本、DOM等客户端行为,另一方面在服务器端则出现了CGI规范以响应客户端的动态请求,作为传输载体的HTTP协议也添加了文件上载、cookie这些特性。其中cookie的作用就是为了解决HTTP协议无状态的缺陷所作出的努力。至于后来出现的session机制则是又一种在客户端与服务器之间保持状态的解决方案。

让我们用几个例子来描述一下cookie和session机制之间的区别与联系。笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微乎其微,这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案:

1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。

2、发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。

3、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。

由于HTTP协议是无状态的,而出于种种考虑也不希望使之成为有状态的,因此,后面两种方案就成为现实的选择。具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。

cookie和session之间的爱情故事:

cookie 与 session 的区别

  • cookie 存储在浏览器(有大小限制),session 存储在服务端(没有大小限制)
  • 通常 session 的实现是基于 cookie 的,即 session id 存储于 cookie 中

啥是cookie:

当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来。当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie,里的内容来判断使用者,送出特定的网页内容给你。

登录功能

实现登录功能很简单,验证客户端发送过来的账户和密码,如果通过验证就把用户塞进 session 中,然后在后续的访问中,只需检测 session 是否有这个用户就能知道用户是否登录了。Session 的中文翻译为:「会话」,只属于某一个客户端和某一个服务器端沟通的工具。但,计算机网络老师又说了,HTTP 协议是无状态的,怎么能记录用户的登录状态呢?
鉴于 HTTP 是无状态协议,之前已认证成功的用户状态是无法通过协议层面保存下来的,既,无法实现状态管理,因此即使当该用户下一次继续访问,也无法区分他和其他的用户。于是我们会使用 Cookie 来管理 Session,以弥补 HTTP 协议中不存在的状态管理功能。

  • 步骤 1:客户端把用户 ID 和密码等登录信息放入报文的实体部分,通常是以 POST 方法把请求发送给服务器。

  • 步骤 2:服务器会发放用以识别用户的 Session ID。通过验证从客户端发送过来的登录信息进行身份验证,然后把用户的认证状态与 Session ID 绑定后记录在服务器端。向客户端返回响应时,会在首部字段 Set-Cookie 内写入 Session ID。

  • 步骤 3:客户端接收到从服务器端发来的 Session ID 后,会将其作为 Cookie 保存在本地。下次向服务器发送请求时,浏览器会自动发送 Cookie,所以 Session ID 也随之发送到服务器。服务器端可通过验证接收到的 Session ID 识别用户和其认证状态。

cookie机制:

正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。而cookie的使用

是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围,大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。

 

为 Cookie 服务的 HTTP 首部字段

本文由金沙澳门官网发布于网络编程,转载请注明出处:【金沙澳门官网】Python 爬虫 (一)

关键词: 金沙澳门官网