Python爬虫基础重要数据类型

重要数据类型

列表数据类型

  • 在实际开发中,经常需要将一组(不只一个)数据存储起来,以便后边的代码使用。列表就是这样的一个数据结构。且列表是Python中最基本也是最常用的数据结构之一。
  • 什么是数据结构呢?
  • 通俗来讲,可以将数据结构当做是某种容器,该容器是用来装载或者存储数据的。不同的数据结构决定了对数据不同的组织方式。
    • 那么当数据被装载或者存储到了某个数据结构中后,那么就可以基于该数据结构的特性对数据进行不同形式的处理和运算。
  • 列表的创建方式
    • 创建一个列表,只要把逗号分隔的不同的数据元素使用方括号括起来即可。列表内的元素,可以是其它任意类型的数据,可多层嵌套列表,元素个数无限制。
    • alist = [1,2,3,4,5]
      items = [1,'spider',12.34]
      #列表中可以存储任意类型的数据
      
  • 列表元素:
    • 存储在列表数据结构中的每一个数据被称为列表元素,简称元素。
  • 列表索引:
    • 列表中的每个元素都被分配一个数字作为索引,用来表示该元素在列表内所排在的位置。第一个元素的索引是0,第二个索引是1,依此类推。
  • 列表特性:
    • Python的列表是一个有序可重复的元素集合,可嵌套、迭代、修改、分片、追加、删除,成员判断。
  • 访问列表内的元素
    • 列表从0开始为它的每一个元素顺序创建下标索引,直到总长度减一。要访问它的某个元素,以方括号加下标值的方式即可。注意要确保索引不越界,一旦访问的 索引超过范围,会抛出异常。所以,一定要记得最后一个元素的索引是len(list)-1。
    • alist = [1,12.3,'dme']  
      print(alist[2])  #'dme'    
      print(alist[0:2]) #[1, 12]    
      print(alist[6]) #使用索引和切片的时候,不可以访问超出索引范围的元素   
      
  • 修改元素的值
    • 直接对元素进行重新赋值
      • alist = [1,12.3,'dme']    
        alist[1] = 100.123    
        print(alist)  
    • 删除元素
      • 使用del语句或者remove(),pop()方法删除指定的元素。
      • alist = [1,12.3,'dme']    
        # del alist[0] #删除下标为0的列表元素    
        # alist.remove('dme') 
        #删除列表中dme这个列表元素    
        # alist.pop() 
        #默认情况下pop会把列表中最后一个元素删除         
        alist.pop(2) #将列表中下标为2的元素进行删除
        print(alist)  
        
    • 切片
      • 切片指的是对序列进行截取,选取序列中的某一段。
      • 切片的语法是: list[start:end]
      •  #同字符串的切片机制一样   
        
      • 以冒号分割索引,start代表起点索引,end代表结束点索引。省略start表示以0开始,省略end表示到列表的结尾。注意,区间是左闭右开的!也就是说[1:4]会截取列表的索引为1/2/3的3个元素,不会截取索引为4的元素。分片不会修改原有的列表,可以将结果保存到新的变量,因此切片也是一种安全操作,常被用来复制一个列表,例如newlist = lis[:]。
      • 切片过程中还可以设置步长,以第二个冒号分割,例如list[3:9:2],表示每隔多少距离取一个元素。
    • 列表的内置方法
      • alist = ['dme',"18","99.5",'北京']#将列表转换成字符串  ret = '-'.join(alist) #将列表中的每一个列表元素根据-为间隔进行拼接,返回字符串结果  print(ret)    #如何将字符串转换成列表  s = 'hello-name-dme-age'  ret = s.split('-')  print(ret)    alist = [3,8,5,7,6,2,1]  alist.sort() #对列表元素进行排序  print(alist)    a = [1,2,3]  a.append('dme') #向列表尾部添加一个元素  print(a)    a1 = [1,2,3]  a1.insert(1,999) #向列表下标为1的位置添加一个元素  print(a1)  
        

元组数据类型

  • 用方括号括起来的是列表,那么用圆括号括起来的就是元组。

  • 元组也是序列结构,但是是一种不可变序列,你可以简单的理解为内容不可变的列表。除了在内部元素不可修改的区别外,元组和列表的用法差不多。

  •  t = (1,2,3,4,5)
    
  • 元组与列表相同的操作:

    • 使用方括号加下标访问元素
    • 切片(形成新元组对象)
    • count()/index()
    • len()/max()/min()
  • 元组中不允许的操作,确切的说是元组没有的功能:

    • 修改、新增元素
  • 删除某个元素(但可以删除整个元组)

  • 所有会对元组内部元素发生修改动作的方法。例如,元组没有remove,append,pop等方法。

字典数据类型

  • 字典的实现机制:
    • Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。
  • 字典特性:
    • 字典包含的元素个数不限,值的类型可以是任何数据类型!但是字典的key必须是不可变的对象,例如整数、字符串、bytes和元组,最常见的还是将字符串作为key。列表、字典、集合等就不可以作为key。同时,同一个字典内的key必须是唯一的,但值则不必。
    • 注意:从Python3.6开始,字典是有序的!它将保持元素插入时的先后顺序!请务必清楚!
  • 创建字典
    • 字典的每个键值对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,例如:
    • d = {key1 : value1, key2 : value2 }
  •    #键值对:key : value    #key:只能使用不可变类型的数据充当,通常使用字符串    #value:任意数据类型的值充当    #字典中无法存储重复的键值对    dict_1 = {'name':'dme','age':18,'score':100,'age':18} #注意:不要在字段中存储相同的key,value可以相同    dict_2 = {'name':'dme','age':18,'age':20}   print(dict_2)  
    
  • 访问字典
    • 虽然现在的字典在访问时有序了,但字典依然是集合类型,不是序列类型,因此没有索引下标的概念,更没有切片的说法。但与list类似的地方是,字典采用把相应的键放入方括号内获取对应值的方式取值。
      •  d = {'name':'dme','age':20,"scores":[100,120,99]}    #根据key访问对应的value值    print(d['name'],d['scores']) #依次访问name和scores对应的value值    print(d.get('name')) #通过get使用对应的key访问对应的value值       #注意:使用[]访问不存在的key对应的value值程序会报错    # print(d['adress']) #程序报错        #注意:使用get访问不存在的key程序不会报错,但是会返回None这个空值    print(d.get('address'))    
        
  • 添加和修改
    • 增加就是往字典插入新的键值对,修改就是给原有的键赋予新的值。由于一个key只能对应一个值,所以,多次对一个key赋值,后面的值会把前面的值冲掉。
    • d = {'name':'dme','age':20,"scores":[100,120,99]}      
      d['name'] = 'jay' 
      #给存在的key修改对应的value值  
      d['address'] = 'Beijing' 
      #给一个不存在的key赋值表示新增键值对  
      del d['age'] #删除age键值对  
      print(d)  
      
  • 删除字典元素、清空字典和删除字典
    • 使用del关键字删除字典元素或者字典本身,使用字典的clear()方法清空字典。
   d = {'name':'dme','age':20,"scores":[100,120,99],'name':'dme'}del d['name']print(d)d = {'name':'dme','age':20,"scores":[100,120,99],' name':'dme'}del dprint(d)d = {'name':'dme','age':20,"scores":[100,120,99],'name':'dme'}d.clear()print(d)
  • 字典的重要方法
d = {'name':'dme','age':20,"scores":[100,120,99]}
print(d.keys()) 
#返回字典中所有的key
print(d.values()) 
#返回字典中所有的value
print(d.items()) 
#返回字典中所有的键值对

bytes字节类型/二进制类型

  • 在Python3以后,字符串和bytes类型彻底分开了。字符串是以字符为单位进行处理的,bytes类型是以字节为单位处理的。
  • bytes数据类型在所有的操作和使用甚至内置方法上和字符串数据类型基本一样,也是不可变的序列对象。
  • 作用
    • bytes对象只负责以二进制字节序列的形式记录所需记录的对象。Python3中,bytes通常用于网络数据传输、二进制图片和文件的保存等等
  • 创建方式
msg = b'hello' 
#创建了一个二进制类型的变量,存储的是hello二进制的数据
#将msg二进制类型的数据转换成字符串
s_msg = msg.decode()
print(s_msg)
#字符串转二进制类型
new_msg = s_msg.encode()
print(new_msg)
#字符串转二进制msg = '你好吗?'
#使用gbk的编码将中文的字符串编码成二进制的形式byte_msg = msg.encode(encoding='gbk')
print(byte_msg)
#二进制转字符串:使用gbk对二进制进行解码,还原成中文的字符串形式
ret = byte_msg.decode(encoding='gbk')
print(ret)

set集合

  • 特性
    • set集合是一个无序不重复元素的容器,集合数据类型的核心在于自动去重。
  • 创建方式
    • 集合使用大括号{}框定元素,并以逗号进行分隔。但是注意:如果要创建一个空集合,必须用 set() 而不是 {} ,因为后者创建的是一个空字典。集合除了在形式上最外层用的也是花括号外,其它的和字典没有一毛钱关系。
s = {1,2,3,'dme',99.9,1,2,3}
s = set()
print(s)
  • 注意:
    • 集合既不支持下标索引也不支持字典那样的通过键获取值。
  • 作用
    • 集合数据类型属于Python内置的数据类型,但不被重视,在很多书籍中甚至都看不到一点介绍。其实,集合是一种非常有用的数据结构,它的去重和集合运算是其它内置类型都不具备的功能,在很多场合有着非常重要的作用,比如网络爬虫。
    • 我们都知道爬虫需要发散链接,一个页面连着另一个页面,不断爬取所有的超级链接,才能把整个站点爬取下来。然而在成千上万个页面链接中,有很大一部分可能是重复的链接或者循环互链,如果不对链接进行去重处理,那么爬虫要么陷入死循环内,要么就是出现错误。这个时候可以用集合的去重功能,保留一个曾经爬过页面的不重复的元素集合,每爬一个新链接,看看集合里是否曾经爬过,没有就开始爬,并将链接加入集合,爬过就忽略当前链接。在这里,用集合远比用列表或者字典要来得高效、节省得多。
  • 感谢大伙观看,别忘了三连支持一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23278.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS环境变量配置+解析

环境变量的作用就是让系统快速通过你的命令找到你的可执行程序,windows系统里也同理,也就是你每次输入个命令,系统就会找环境变量里到底有没有叫这个命令进程的 一、环境变量配置 1.编辑配置文件 vim /etc/profile export PATH$PATH:$JAVA…

einops测试

文章目录 1. einops2. code3. pytorch 1. einops einops 主要是通过爱因斯坦标记法来处理张量矩阵的库,让矩阵处理上非常简单。 conda : conda install conda-forge::einopspython: 2. code import torch import torch.nn as nn import torch.nn.functional as…

Unity教程(二十一)技能系统 基础部分

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程(零)Unity和VS的使用相关内容 Unity教程(一)开始学习状态机 Unity教程(二)角色移动的实现 Unity教程(三)角色跳跃的实现 Unity教程&…

Docker:Docker从入门到精通(一)- Docker简介

一、前言 通过本专栏的学习,我们将了解   1. 掌握Docker基础知识,能够理解Docker镜像与容器的概念   2. 完成Docker安装与启动   3. 掌握Docker镜像与容器相关命令   4. 掌握Tomcat Nginx 等软件的常用应用的安装   5. 掌握docker迁移与备份相…

单机上使用docker搭建minio集群

单机上使用docker搭建minio集群 1.集群安装1.1前提条件1.2步骤指南1.2.1安装 Docker 和 Docker Compose(如果尚未安装)1.2.2编写docker-compose文件1.2.3启动1.2.4访问 2.使用2.1 mc客户端安装2.2创建一个连接2.3简单使用下 这里在ubuntu上单机安装一个m…

Image Downloader下载文章图片的WordPress插件

源码介绍 一个用于下载图片的WordPress插件,包含下载统计功能,支持任何主题使用 用户点击下载后自动打包该文章所有原始图片,并把文章标题作为压缩包的文件名。 不占用服务器空间,也不占网盘空间,直接利用浏览器的性…

PLC通讯

PPI通讯 是西门子公司专为s7-200系列plc开发的通讯协议。内置于s7-200 CPU中。PPI协议物理上基于RS-485口,通过屏蔽双绞线就可以实现PPI通讯。PPI协议是一种主-从协议。主站设备发送要求到从站设备,从站设备响应,从站不能主动发出信息。主站…

VScode+stfp插件,实现文件远程同步保存【2025实操有效】

目录 1 痛点2 准备工作3 操作步骤3.1 第一步,下载STFP插件3.2 第二步,修改配置文件3.3 第三步,测试是否成功 4 后记 1 痛点 我一直用vscode远程连接服务器,传代码文件等到服务器上面,突然有一次服务器那边尽心维修&am…

【quicker】调节PPT指定字号字体大小/快速调节WPS的PPT字体大小

在quicker的拓展动作中找不到直接指定字号大小方式的动作。 换个思路,既然无法通过alt键模拟,不如模拟右键菜单触发?尝试过失败了 所以有了第三种方法 ,首先给字体窗口设置快捷键,此处设置的是altshiftf,然…

Grouped-Query Attention(GQA)详解: Pytorch实现

Grouped-Query Attention(GQA)详解 Grouped-Query Attention(GQA) 是 Multi-Query Attention(MQA) 的改进版,它通过在 多个查询头(Query Heads)之间共享 Key 和 Value&am…

百度百舸 DeepSeek 一体机发布,支持昆仑芯 P800 单机 8 卡满血版开箱即用

在私有云环境中成功部署 DeepSeek 满血版并实现性能调优,并不是一件容易的事情。选择合适的 GPU 配置、安装相应的环境、成功部署上线业务、加速推理任务加速、支撑多用户并发 …… 完成业务测试,成功融入生产业务中。 为了帮助企业快速实现 DeepSeek 服…

c++入门-------命名空间、缺省参数、函数重载

C系列 文章目录 C系列前言一、命名空间二、缺省参数2.1、缺省参数概念2.2、 缺省参数分类2.2.1、全缺省参数2.2.2、半缺省参数 2.3、缺省参数的特点 三、函数重载3.1、函数重载概念3.2、构成函数重载的条件3.2.1、参数类型不同3.2.2、参数个数不同3.2.3、参数类型顺序不同 前言…

tortoiseGit的使用和上传拉取

tortoiseGit的使用和上传拉取 下载TortoiseGit 通过网盘分享的文件:tortoiseGit.zip 链接: https://pan.baidu.com/s/1EOT_UsM9_OysRqXa8gES4A?pwd1234 提取码: 1234 在电脑桌面新建文件夹并进入 右击鼠标 将网址复制上去 用户名和密码是在git注册的用户名和…

Mybatis学习总结

官网 概念 用于简化JDBC的开发。 在配置mybatis的时候如果没有建立连接识别不了信息,我们需要在idea配置mysql的配置信息 JDBC是一套操作关系数据库的API,有效率,和mybatis比起来资源节约,性能高,不繁琐。 数据库连…

SQL笔记#数据更新

一、数据的插入(INSERT语句的使用方法) 1、什么是INSERT 首先通过CREATE TABLE语句创建表,但创建的表中没有数据;再通过INSERT语句向表中插入数据。 --创建表ProductIns CREATE TABLE ProductIns (product_id CHAR(4) NOT NULL,product_name …

dockerfile构建haproxy

1. 结构目录 [rootlocalhost ~]# tree haproxy/ haproxy/ ├── dockerfile └── files├── haproxy-2.5.0.tar.gz├── haproxy.cfg├── install.sh└── start.sh1 directory, 5 files [rootlocalhost ~]# [rootlocalhost ~]# cd haproxy/ [rootlocalhost haproxy]…

Docker(Nginx)部署Vue

简介:目标使用docker将vue生成的dist文件,结合nginx生成镜像,然后运行; 1、首选确保vue项目正确运行,并能正确打包dist文件; 2、查看已经生成的dist文件 3、将dist文件打包为rar文件或者zip文件&#xf…

C++——模版(二)

前言 我们前面讲过模版的一,不知道大家还有没有所印象,如果大家不太能回忆起来可以再去前面看一下,那通过我们讲解了几个容器之后,相信大家现在应该已经对模版很熟悉了,那模版还剩下一些其他的内容我们就在这里进行讲…

算法与数据结构(旋转链表)

题目 思路 每个节点向右移动k个位置,其实就是从头开始遍历,将n-k个节点顺序插入到链表的尾部。 如上图所示的示例1,先将1插入到5的后面,再将2插入到1的后面,最后将3插入到2的后面即可。 代码详解 定义一个cur变量用…

TOGAF之架构标准规范-信息系统架构 | 应用架构

TOGAF是工业级的企业架构标准规范,信息系统架构阶段是由数据架构阶段以及应用架构阶段构成,本文主要描述信息系统架构阶段中的应用架构阶段。 如上所示,信息系统架构(Information Systems Architectures)在TOGAF标准规…