爬虫py基础
前言
**这是我参与「第四届青训营 」笔记创作活动的第三天**
这篇文章是为了准备爬虫项目而准备的基础知识,虽然是非常简单的py,
但是我之前确实是没有学过,不得不说,有了C++的一点点底子,学起来是真
的非常轻松。
整体学习思路
**数据类型->结构类型->控制语句->爬虫相关的库**
1、学习结构类型的时候我觉得在学过mysql语句之后,我发现所有存储数据
的东西都是围绕着增删改查来进行,学习与记录相关的函数的时候也应当以此
为出发点,列如列表可以修改元素的数值,但是元组是不可以的。
2、库函数里面有的低版本能用,高版本有的就被弃用,还是要多查询,不能
一味的copy别人的代码,这一点在反序列化load()函数中就有体现
基础知识:
-
Python
-
数据类型
-
数字numbers:
- int
- long
- float
- complex
-
布尔bool:
-
字符串String
-
列表List
-
元组Tuple
-
字典Dictionary
-
-
查看数据类型<-type(变量名字)
-
标识符与关键字
- 命名规范:@数字不开头@区分大小写@不能用关键字
- 大驼峰&小驼峰:@使用小驼峰<-首单词小写后面大写::upDir
-
类型转换
-
几个函数
- int()
- float()
- str():@注意bool转换之后就是True&&Flase
- Bool():@非零数都是True,包含负数@字符串、列表、元组、字典只要不空就为True
-
-
运算符
-
算数运算符
- 📢:/&//两个的区别
-
赋值运算符:就是等号
-
复合赋值运算符
- 复合类型的
-
比较运算符
- 总结表格
-
逻辑运算符
- 总结:
-
性能提升
- And:当and之前的结果为Flase时,后面便不再执行
- Or:当or之前的结果为True时,后面就不再执行
-
-
输入输出
-
格式化输出:%s 字符串%d数字
print('我的名字%s,年龄是%d' % (name,age)) -
输入:
s=input('请输入您的银行卡密码')
-
-
流程控制语句
-
if语句
if 要判断的条件: 条件成立时的操作 -
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]))
-
-
-
数据类型高级
-
字符串高级
#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)) -
列表的高级
-
列表的添加
#任何的数据结构都会有->增删改查 food_list=['九转大肠','🐿桂鱼','葱烧海参'] #单个元素添加 food_list.append('夫妻肺片') #单个元素插入制定下标 food_list.insert(1,'溜肉段') #列表在尾部插入,区分append??? food_list2=['黄焖鸡','红烧乳鸽'] food_list.extend(food_list2) print(food_list) -
列表的修改
#直接通过下标进行修改 food_list[2]='xxx' -
列表的查询
实际上借助的就是if判断 food1 =food_list food = input('输入您想吃的') if food in food1: print('吃啊吧') else: print('问问👩🏻•🍳,能干不') -
列表的删除
#######删除######### #根据索引进行删除 del food1[1] print(food1) #删除列表中的最后一个数据 food1.pop() print(food1) #根据列表元素的值进行删除 food1.remove('夫妻肺片') print(food1)
-
-
元组的高级应用⭐️元组中的元素是不能被修改,因而功能只有增删查
#列表中的元素是可以直接修改的,但是元组不可以 #当元组中只有一个数据的时候,元祖的数据类型为该元素的类型 #为了避免以上的情况 s=(2,) -
切片⭐️
#在切片中直接写一个下标,切单个元素 print(s[0]) #切片切其中的一部分,遵循左闭右开 print(s[0:4]) #切片从起始值开始,一直到末尾 print(s[1:]) #切片从头开始到规定值 print(s[:4]) -
字典的高级应用⭐️
-
添加
########添加########## #使用[]来直接进行添加 person['sex']= 'woman' print(person['sex']) -
修改
########修改############# person['name']='fawai' print(person['name']) -
删除
########删除############# #del ##1\删除字典里面指定的某一个元素 del person['sex'] print(person) ##2\删除整个字典 #del person #clear ##清空字典内所保存的值,但是保存{} person.clear() print(person) -
遍历
#遍历字典中的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)) -
查询
########查询############ #查询字典中的key,通过中括号 print(person['name']) print(person['age']) #使用[]这种的方式,获取字典中不存在的key的时候会发生异常 #print(person['sex']) #查询还可以使用get函数 print(person.get('name')) #使用get函数进行字典内容获取的时候, #如果key不存在,不会报错,会返回None!! print(person.get('sex'))
-
-
-
函数高级操作
#定义函数 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()) #局部变量与全局变量 #在函数内部为局部变量,只在函数内使用 #在函数外部为全局变量 -
文件高级操作
-
基本操作
# 创建文件 #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) -
序列化和反序列化
- 序列化
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()-
反序列化
#首先我们两个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)) -
异常
try: fp=open('tys/txt','r') fp.read() except FileNotFoundError: print('系统正在升级')
-