您的位置:首页 > 产品设计 > UI/UE

爬虫requests模块和数据分类以及cookie和session

2020-04-04 18:24 1451 查看

一、requests模块(重点)

(一)requests模块简介

    Urllib和requests模块是发起http请求最常见的模块。

    安装:pip install reqeusts

(二)requests模块的get方法

        1、response = requests.get(

           url=请求url地址,

           headers = 请求头字典,

           params=请求参数字典,

        )

        2、get请求一般带参数,带参数就将参数封装到params字典中就可以了。

           案例:新浪新闻,两种分装params请求参数方式

        3、response对象

           (1)响应正文:

               a、字符串格式的响应正文:response.text

               b、字节类型(bytes)的响应正文:response.content

           (2)响应正文的乱码问题解决:

               a、encode和decode就是二进制和字符串之间转换方法。

               编程里面数据载体

                  存储用变量或者常量

                  可以看到数据的内容一定是字符串格式。

                  正常的计算机数据本质都是二进制--bytes。

                str.encode('编码')--->bytes

                bytes.decode('编码')---->str

               乱码:编码不一致造成的。

               response.content.decode('页面的正确编码')---得到页面正确的字符串内容

              

               b、response.text之所以可以获取字符串格式,其实在requests模块的底层用

               response.encoding这个属性所对应的编码来将二进制内容变成字符串。其实就是response.encoding所对应的编码错了。只需要指定正确的即可。

               response.encoding这个属性值值是requests模块自动识别。

               response.encoding='页面正确编码'

               response.text---》正确的页面内容

               如果response.text乱码了,可以先给response.encoding设置正确编码,在通过response.text就可以获取正确的页面内容。

              

               内置函数&内置模块:python自带的模块

               dir()

               str()

           (3)状态码:response.status_code

           (4)响应头:response.headers

        4、分页如何实现?

           分页的请求的每一页url基本上都是通过get请求的一个请求参数决定的,所以其实只需要通过get请求的params字典中的分页字段找到规律,就可以了。

           案例:百度贴吧分页信息爬取

(三)requests post请求

        response = requests.post(

           url = 请求url地址,

           headers = 请求头字典,

           data=请求数据字典,

        )---response对象。

      

 

              

三、数据的分类

    1、分类

    (1)结构化数据:能用关系型数据库描述的数据。

        特点:数据以行为单位,一行数据表示一个实体的信息,每一行的数据的属性是相同的。

        举例:关系数据库中存储的表

        处理方法:sql---结构化查询语言---语言---可以在关系型数据库中对数据的操作。

    (2)半结构化数据:拥有字描述结构数据

        特点:包含相关标记,用来分隔语义元素以及对记录和字段进行分层----也别成为自描述结构

        举例:html,xml,json。

        处理方法:正则,xpath(xml,html)

    (3)非结构化数据:

        特点:没有固定结构的数据。

        举例:文档,图片,视频,音频等等,都是通过整体存储二进制格式来保存的。

            如果下载视频,音频。

        处理:

           response = requests.get(url='视频的地址')

           保存response.content即可,文件名称后要注意。

    2、json(json(JavaScript Object Notation,JS对象标记))数据

        json是一种数据【交换】的格式。

        json是如何来进行交换的。

        【json其实是在js语言中,用'字符串'的形式来表示json中的对象和数组的一种技术。】所以json本质上是字符串。

        js中的对象:var obj = {name:'zhangsan',age:'10'}----在python中这个可以当成:字典

        js中的数组:var arr = ['a','b','c','d']----在python中这个可以当成:list。

    3、json数据的处理(重点)

        (1)使用json模块处理。

        json_str:json数据

        json.loads(json_str)--->python的list或者字典

        json.dumps(python的list或者字典)--->json_str

        (2)在requests模块中,response对象有个json方法,可以直接得到相应json字符串解析后的内容

           response.json()--->python的list或者字典

四、cookie和session

    1、什么是cookie和session?

        cookie是网站用来辨别用户身份,进行会话跟踪,存储在本地终端上的数据。

        session(会话)起来本含义是指有始有终的一系列动作和消息。在web中,session主要用来在服务器端存储特定用户对象会话所需要的信息。

    2、cookie和session产生的原因:

        http协议是一个无状态协议,在特定操作的时候,需要保存信息,进而产生了cookie和session。

    3、cookie原理:

        由服务器来产生,浏览器第一次请求,服务器发送给客户端进而保存。

        浏览器继续访问时,就会在请求头的cookie字段上附带cookie信息,这样服务器就可以识别是谁在访问了。

       

        但是cookie存在缺陷:

           1、不安全--本地保存,容易被篡改。

           2、大小受限,本身最大4kb。

          

        cookie虽然在一定程度上解决了‘保持状态’的需求,但是我们希望有一种新的技术可以克服cookie缺陷,这种技术就是session。

    4、session原理:

        session在服务器保存。----解决安全问题。

        问题来了:服务器上的session,但是客户端请求发送过来,服务器如何知道session_a,session_b,到底和那个请求对应。

        所以为了解决这个问题:cookie就作为这个桥梁。在cookie有一个sessionid字段,可以用来表示这个请求对应服务器中的哪一个session。

        禁用cookie,一般情况下,session也无法使用。特殊情况下可以使用url重写技术来使用session。

           url重写技术:将sessionid拼接到url里面。

          

        session的生命周期:服务器创建开始,有效期结束(一般网站设定都是大约30分钟左右),就删除。

5、常见误区:打开浏览器中的一个网页,浏览器关闭,这个网页的session会不会失效?
        不会,服务器到底删除不删除session,由session的生命周期。有效期结束,就会被删除。
 6、cookie的字段
        (1)Name : 该的名称。一旦创建, 该名称便不可更改。
        (2)value : 该cookie 的值。如果值为Unicode 字符, 需要为字符编码。如果值为二进制数据, 则需要使用BASE64 编码。
        (3)Domain : 可以访问该cookle 的域名。例如, 如果设置为.zhihu.com , 则所有以zhihu.com 结尾的域名都可以访问该cookie。
        (4)MaxAge : 该cookie 失效的时间, 单位为秒, 也常和Expires一起使用, 通过它可以计算出其有效时间。Max Age 如果为正数, 则该cookie 在Max Age 秒之后失效。如果为负数, 则关闭浏览器时cookie 即失效, 也不会以任何形式保存该cookie 。
        (5)Path : 该cookie 的使用路径。如果设置为/path/ , 则只有路径为/ path / 的页面可以访问该cookie 。如果设置为/ , 则本域名下的所有页面都可以访问该cookieo
        (6)Size 字段: 此Cookie 的大小。
        (8)HTTP 字段: cookie 的httponly 属性。若此属性为true , 则只有在HTTP 头中会带有此Cookie 的信息, 而不能通过document.cookie 来访问此Cookie。
        (9)Secure : 该cookie 是否仅被使用安全协议传输。安全协议有H TTP s 和SSL 等, 在网络上传输数据之前先将数据加密。默认为false。

    7、会话cookie和持久cookie
    会话cookie:Max Age 为负数,则关闭浏览器时cookie 即失效,保存在内存中的cookie。
    持久cookie:Max Age 如果为正数, 则该cookie 在Max Age 秒之后失效。保存在硬盘上的cookie

    持久化:将内存中数据持久化到硬盘上。其实就是数据保存到文件或者数据库中。
    内存主要的作用就是由于速度快速度快,启动应用软件或者程序的时候,就会分配一定内存空间作为该程序运行内存。
    内存一旦断点,就会被清空。
    
    序列化:将对象持久化到硬盘中。

 

 

  • 点赞
  • 收藏
  • 分享
  • 文章举报
fxd_dong 发布了7 篇原创文章 · 获赞 0 · 访问量 2329 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: