爬虫之py基础知识 | 青训营笔记

164 阅读5分钟

爬虫py基础


前言

**这是我参与「第四届青训营 」笔记创作活动的第三天**
这篇文章是为了准备爬虫项目而准备的基础知识,虽然是非常简单的py, 
但是我之前确实是没有学过,不得不说,有了C++的一点点底子,学起来是真 
的非常轻松。

整体学习思路

**数据类型->结构类型->控制语句->爬虫相关的库**
1、学习结构类型的时候我觉得在学过mysql语句之后,我发现所有存储数据
的东西都是围绕着增删改查来进行,学习与记录相关的函数的时候也应当以此
为出发点,列如列表可以修改元素的数值,但是元组是不可以的。
2、库函数里面有的低版本能用,高版本有的就被弃用,还是要多查询,不能
一味的copy别人的代码,这一点在反序列化load()函数中就有体现

基础知识:

  1. Python

    1. 数据类型

      1. 数字numbers:

        1. int
        2. long
        3. float
        4. complex
      2. 布尔bool:

      3. 字符串String

      4. 列表List

      5. 元组Tuple

      6. 字典Dictionary

    2. 查看数据类型<-type(变量名字)

    3. 标识符与关键字

      1. 命名规范:@数字不开头@区分大小写@不能用关键字
      2. 大驼峰&小驼峰:@使用小驼峰<-首单词小写后面大写::upDir
    4. 类型转换

      1. 几个函数

        1. int()
        2. float()
        3. str():@注意bool转换之后就是True&&Flase
        4. Bool():@非零数都是True,包含负数@字符串、列表、元组、字典只要不空就为True
    5. 运算符

      1. 算数运算符

        1. 📢:/&//两个的区别
      2. 赋值运算符:就是等号

      3. 复合赋值运算符

        1. 复合类型的
      4. 比较运算符

        1. 总结表格
      5. 逻辑运算符

        1. 总结:
      6. 性能提升

        1. And:当and之前的结果为Flase时,后面便不再执行
        2. Or:当or之前的结果为True时,后面就不再执行
    6. 输入输出

      1. 格式化输出:%s 字符串%d数字

         print('我的名字%s,年龄是%d' % (name,age))
        
      2. 输入:

         s=input('请输入您的银行卡密码')
        
    7. 流程控制语句

      1. if语句

         if 要判断的条件:
             条件成立时的操作
        
      2. for语句

         for 变量 in 变量的数据:
             方法体
             
         for i in range(5):
         for i in range(1,6):
         for i in range(1,10,3):
         #下面展示一个列表的遍历
         #循环一个列表
         a_list =['秦始皇','秦桧','秦王']
         #遍历列表中的元素
         for i in a_list:
             print(i)
         #遍历列表中的下标
         for i in range(len(a_list)):
             print('下标:%d,name:%s'% (i,a_list[i]))
        

  1. 数据类型高级

    1. 字符串高级

       #find查找:有返回下标,没有返回-1
       print(s1.find('i'))
       #startswith字符串的头
       print(s1.startswith('c'))
       #endswith字符串的尾
       print(s1.endswith('m'))
       #count计算在字符串中间出现目标字符的次数
       print(s1.count('i'))
       #replace替换制定字符&字符串的内容
       print(s1.replace('ina','love'))
       #split切割字符串,字符串切割完成之后就是列表
       s1='c#h#i#n#a'
       print(s1.split('#'))
       print(type(s1.split('#')))
       #下面这一串代码就是剥离出来#号之后的操作
       s2 =''
       for i in range(len(s1.split('#'))):
           s2 += s1.split('#')[i]
       print(s2)
       s1=s2
       #upper,lower修改大小写
       print(s1.upper())
       print(s1)
       print(s1.lower())
       #strip去除字符串中的空格
       s1 = '   china'
       print(len(s1))
       s1=s1.strip()
       print(len(s1))
      
    2. 列表的高级

      1. 列表的添加

             #任何的数据结构都会有->增删改查
             food_list=['九转大肠','🐿桂鱼','葱烧海参']
             #单个元素添加
             food_list.append('夫妻肺片')
             #单个元素插入制定下标
             food_list.insert(1,'溜肉段')
             #列表在尾部插入,区分append???
             food_list2=['黄焖鸡','红烧乳鸽']
             food_list.extend(food_list2)
             print(food_list)
        
      2. 列表的修改

         #直接通过下标进行修改
         food_list[2]='xxx'
        
      3. 列表的查询

         实际上借助的就是if判断
         food1 =food_list
         food = input('输入您想吃的')
         if food in food1:
             print('吃啊吧')
         else:
             print('问问👩🏻•🍳,能干不')
        
      4. 列表的删除

         #######删除#########
         #根据索引进行删除
         del food1[1]
         print(food1)
         #删除列表中的最后一个数据
         food1.pop()
         print(food1)
         #根据列表元素的值进行删除
         food1.remove('夫妻肺片')
         print(food1)
        
    3. 元组的高级应用⭐️元组中的元素是不能被修改,因而功能只有增删查

       #列表中的元素是可以直接修改的,但是元组不可以
       #当元组中只有一个数据的时候,元祖的数据类型为该元素的类型
       #为了避免以上的情况
       s=(2,)
      
    4. 切片⭐️

       #在切片中直接写一个下标,切单个元素
       print(s[0])
       #切片切其中的一部分,遵循左闭右开
       print(s[0:4])
       #切片从起始值开始,一直到末尾
       print(s[1:])
       #切片从头开始到规定值
       print(s[:4])
      
    5. 字典的高级应用⭐️

      1. 添加

         ########添加##########
         #使用[]来直接进行添加
         person['sex']= 'woman'
         print(person['sex'])
        
      2. 修改

         ########修改#############
         person['name']='fawai'
         print(person['name'])
        
      3. 删除

         ########删除#############
         #del
         ##1\删除字典里面指定的某一个元素
         del person['sex']
         print(person)
         ##2\删除整个字典
         #del person
         ​
         #clear
         ##清空字典内所保存的值,但是保存{}
         person.clear()
         print(person)
        
      4. 遍历

         #遍历字典中的key
         for key in person.keys():
             print(key)
         #遍历字典中的values
         for value in person.values():
             print(value)
         #遍历字典中的键值对key与value
         for key,value in person.items():
             print(key,value)
         #遍历字典中的item,就是讲键值对包含成一个元组
         for item in person.items():
             print(item)
             print(type(item))
        
      5. 查询

         ########查询############
         #查询字典中的key,通过中括号
         print(person['name'])
         print(person['age'])
         #使用[]这种的方式,获取字典中不存在的key的时候会发生异常
         #print(person['sex'])
         #查询还可以使用get函数
         print(person.get('name'))
         #使用get函数进行字典内容获取的时候,
         #如果key不存在,不会报错,会返回None!!
         print(person.get('sex'))
        
  2. 函数高级操作

     #定义函数
     def f1():
         print('ninhao')
         print('qingjinru')
     ​
     #调用函数
     f1()
     ​
     #函数的传入参数
     #a,b都为形参,这里我们可以给形参一个默认值
     def sum(a=2,b=1):
         c=a+b
         print(c)
     sum(2,3)
     sum()
     ​
     #函数的返回值
     def sum(a=2,b=1):
         c=a+b
         return c
     print(sum())
     ​
     #局部变量与全局变量
     #在函数内部为局部变量,只在函数内使用
     #在函数外部为全局变量
    
  3. 文件高级操作

    1. 基本操作

        # 创建文件
        #open函数
        ##w写权限
        ##r读权限
        fp=open('demo/test.txt','w')
        fp.write('hello world')
       ​
        # 关闭文件
        fp = open("a.txt",'w')
        fp.write('hello\n')
        fp.close()
       ​
        #写文件
        # fp = open("a.txt",'a')
        #反复执行下面这个语句,并不是自动的追加数据,而是覆盖重写
        #如果想在已有数据后面进行追加数据,则需要在open函数中重置文件模式为'a'
        fp.write("hello world ,i am li\n"*5)
        fp.close()
       ​
        #读文件
        #1read函数:这种函数是用一字节一字节的方式进行读取
        #首先开启读权限
        fp = open("a.txt",'r')
        content = fp.read()
        print(content)
        fp.close()
        # 2readline函数,只读取一行
        # 3readlines函数,整个文件按照一行一行的读取,返回的是每一行为一字符串,
        content =fp.readline()
        # print(content)
        content =fp.readlines()
        print(content)
      
    2. 序列化和反序列化

      1. 序列化
       name_list =[“liyongz”,“gouxiong”]
       fp =open('test.txt','a')
       #列表因为不是字符串,无法直接写入到文件当中,因此我们需要序列化我们的列表,进而写入文档
       ​
       #1、dumps()
       #导入json模块
       #日后我们使用scrapy框架的视乎,该框架会返回一个对象,我们需要把这个对象写入到文件当中,需要使用json,dumps
        import json
        name =json.dumps(name_list)
        fp.write(name)
        fp.close()
       ​
       #2、dump()
       #dump函数的作用实际上合并了dumps+write两个函数的作用
       import json
       json.dump(name_list,fp)
       fp.write('\n')
       fp.close()
      
      1. 反序列化

         #首先我们两个load&&loads两个函数本身有很多限制
         #读取的时候只能读取一行
         #并且json里面不能出现单引号
         #这俩函数只能解引双引号
         import json
         fp = open('test.txt','r')
         content = fp.readline()
         print(content)
         #load函数,将json字符串转为数据对象
         result = json.loads(content)
         print(type(result))
         result = json.load(fp)
         print(result)
         print(type(result))
        
      2. 异常

         try:
             fp=open('tys/txt','r')
             fp.read()
         except FileNotFoundError:
             print('系统正在升级')