zoukankan      html  css  js  c++  java
  • 爬虫的基础知识(贰)

    一、requests模块

       (一)requests模块简介:

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

          需要安装:pip install requests

       (二)requests模块的get方法:

          1、response=requests.get(

              url=请求URL地址,

              headers=请求头字典,

              params=请求参数字典

           )

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

          3、response对象:

            (1)响应正文:

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

                b、二进制、字节类型(byte)的响应正文:response.content

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

                乱码是由于编码不一致造成的

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

                    编程里面数据载体:

                      存储用变量或常量

                      可以看到的数据内容一定是字符串格式(因为魔术方法__str__和__repr__)

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

                    str.encode("编码")-->bytes      《======》   bytes(str,encoding='编码')

                    bytes.decode("编码")-->str      《======》   str(bytes,encoding='编码')

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

                b、response.text之所以可以获取字符串格式,其实在requests模块的底层用response.encoding这个属性所对应的编码来将二进制内容变成字符串。其实就是response.encoding所对应的编码错了,只需要指定正确的即可。

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

                  response.encoding="页面的正确编码格式"

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

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

            (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(JavaScript Object Notation)JS对象标记

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

            json是如何来进行交换的?

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

              js中的对象在python中可以当成字典

              js中的数组在python中可以当成列表

        3、json数据的处理:

          (1)使用json模块处理。

            json_str:json数据

            json.loads(json_str)转换为python的列表或字典

            json.load(文件对象)读取json文件,并将其内容转换为Python的列表或字典

            json.dumps(python的列表或字典)转换为json的数据

            json.dump(python的列表或字典,文件对象)转换为json的数据,并写入文件

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

              response.json()---->python的列表或字典

    三、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,如何区分从客户端发送来的请求?为了解决这个问题,cookie存储的时候会有一个sessionid字段,来表示这个请求对应的服务器上哪个session。

            如果禁用了cookie,一般情况下,session也无法使用。(特殊情况下可以使用url重写技术来使用session。 url重写技术:将sessionid拼接到url里面)

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

        5、cookie和session的区别:

            (1)、存储位置不同;

            (2)、安全性不同;

            (3)、服务器压力不同;

            (4)、储存的容量不同(cookie保存的数据一般不超过4K,每个站点最多保存20个cookie)。

  • 相关阅读:
    C++ Programming with TDD之一:GMOCK框架简介
    Linux Programming之MySQL
    Python之自动单元测试之一(unittest使用实例)
    关于过去的这一个月——面试经历
    谈谈Python中对象拷贝
    C++之Effective STL学习笔记Item21
    C++之Effective STL学习笔记Item7
    C++之Effective STL学习笔记Item20
    C++之Effective STL学习笔记Item14
    Coding Rules
  • 原文地址:https://www.cnblogs.com/lavender1221/p/12299722.html
Copyright © 2011-2022 走看看