对第一周实训的总结
在经过tank老师的一周实训后,于周日写下这篇总结,用于整理一周的碎碎记。并且更加简洁化,便于日后的回忆。
一、基础
定义变量三大特征:
value #变量值
type #变量值的类型
id #用来表示变量的值在内存中唯一的一份内存地址
定义变量的注意事项:
要以英文字母或下划线开头
常量:本质上也是变量,不能对其进行修改,且变量名全大写
SCHOOL='合肥学院'
用户与程序交互:
输入:input()
输出:print()
注释
单行:#
多行:'''
字符串的操作
str1=' alex'
#去掉两边空格
print(str1.strip())
#去掉左边空格
print(str1.lstrip())
#去掉右边空格
print(str1.rstrip())
#转换成大写
print(str1.upper())
#转换成小写
print(str1.lower())
#判断字符的开头是否为al(false)
print(str1.startswith('al'))
#判断末尾是否等于x
print(str1.endswitch)
#用空格,把列表中地每一个字符串拼接
print(' ',join([' tank','18','from GZ’]))
#字符串替换
str1='my name is tank,my age 18'
str2=str1.replace('tank','sd')
#判断字符串是否为数字
choice=input('请选择[0,1,2]:')
print(choice.isdigit())
#根据l进行分割
print(name.split('l'))
#输出第二个字符
print(name[1])
#输出前两个字符(顾头不顾尾)
print(name[0:3])
#输出后两个字符
print(name[-2:])
#输出‘e'所在索引位置
print(name.index('e'))
#获取子序列,去掉最后一个字符
print(name[:-1])
formar格式化输出的三种方式
#str1='my name is %s,my age %s'%('tank',18)
#print(str1)
1).根据位置顺序格式化
print('my name is {},my age {}!'.format('tank',18))
2).根据索引格式化,应该是根据0,1,2,的数字顺序进行逐个输出
print('my name is {0},my age {1}'.format('tank',18))
3).指名道姓地格式化
print('my name is {name},my age {age}'.format(name='tank',age=18))
二、关于表,元组,字典
1列表
关于列表的操作:在[]内,存放多个任意类型的值,以,隔开
student_info=['安',18,'male',['泡8','喝9']]
print(student_info[3])
print(student_info[3][1])
print('18' in student_info) #ture(not/false)
#追加
student_info.append('合肥学院’)
#删除
del student_info[2]
#index获得列表中某个值的索引
print(student_info.index('18'))
#count获取列表中某个值的数量
print(student_info.count('18'))
#取值,默认为列表中最后一个值,类似于删除
student_info.pop()
print(student_info)
print(student_info.pop(2))#取出索引为2的值
#移除,把列表中的某个值的第一个值移除
student_info.remove(18)
#插入值,在索引为三的位置插入
student_info.insert(3,'合肥学院')
#extend合并列表,把2所有值插入到1中
student_info1=['安',18,'male',['泡8','喝9']]
student_info2=['安',18,'male',['泡8','喝9'],23]
student_info1.extend(stuent_info2)
循环输出列表内的值
for student in student_info:
print(student)
2.元组
在()内,可以存放多个任意类型的值,并以逗号隔开,与列表不一样,只能在定义时初始化,不能对其进行修改,在内存中占用的资源比列表中小。
tuple1=(1,2,3,'五','六')
#按索引取值
print(tuple1[2])
#按步长,从0至5,步长为3
print(tuple1[0:5:3])#(1,五)
#长度
print(len(tuple1))#5
#判断是否在内
print(1 in tuple1)
#循环输出
for line in tuple1
print(line)
3.字典
在{}内,以逗号隔开可存放多个值,以key-value存取,取值速度快,key是不可变类型
dict1={'age':18,'name':'tank'}
print(dict1)
print(type(dict1))
#取值
print(dict1['age'])
print(dict.get['age'])
#存一个level:9的值到dict1字典中去
dict1['level']=9
#删除
del dict1['level']
#得到所有的keys,values,items
print(dict1.keys())
print(dict1.values())
print(dict1.items())
#循环遍历key
for key in dict1:
print(key)
print(dict1[key])
不可变类型:变量的值修改后,内存地址一定不一样
数字类型:int,float
字符串类型:str
元组类型:tuple
可变类型
列表类型:list
字典类型:dict
循环:
break:跳出本层循环
continue:结束本层循环,进入下一层循环
三、文件处理
1.文件处理:
open()
写文件wt,读文件rt,追加写文本:at
执行python文件的过程:
1).先启动python解释器,加载到内存中。
2).把写好的python文件加载到解释器中。
3).检测语法,执行代码
必须指定字符编码,以什么方式写,就以什么方式打开如:utf-8
打开文件会产生的两种资源:python程序和操作系统打开文件
#参数一:文件的绝对路径
#参数二:mode 操作文件的模式
#参数三:encoding 指定的字符编码
f=open('file.txt',mode='wt',encoding='utf=8')
f.write('tank')
f.close()#关闭操作系统文件资源
#追加写文件
a=open('file.txt','a',encoding='utf-8')
a.write('\n 合肥学院')
a.close()
文件处理之上下文管理:
with可以管理open打开的文件,会在with执行完毕后自动调用close()关闭文件
with open() as f"句柄"
#写
with open('file.txt','w',encoding='utf-8')as f:
f.write('墨菲定律’)
#读
with open('file.txt','r',encoding='utf-8')as f:
res=f.read()
print(res)
#追加
with open('file.txt','a',encoding=utf-8') as f:
f.write('围城‘)
复制照片:
#读取相片cxk.jpg with open('xbx.jpg','rb') as f: res=f.read() print(res) jpg=res #把cxk.jpg的二进制流写入cxk_copy.jpg的文件中 with open('xbx_copy.jpg','wb') as f_w: f_w.write(jpg) #通过with来管理open打开的两个文件句柄f_r,f_w with open('xbx.jpg','rb') as f_r,open('xbx_copy.jpg','wb') as f_w: #通过f_r句柄把图片的二进制流读取出来 res=f_r.read() #通过f_w句柄把图片的二进制流写入cxk_copy.jpg文件中 f_w.write(res
值得注意的把xbx.jpg要与代码放入一个文件夹,且二行代码要后退四格
2.函数:先定义,后调用
三种形式:
1).无参函数:不需要接受外部传入的参数
2).有参函数:需要接受外部传入的参数
3).空函数
#位置参数必须按照位置一一传参
#函数的嵌套定义
def func1()
print('cs')
def func2()
print('sc')
四、爬虫
1.爬虫原理:
#上网过程
1).普通用户:
打开浏览器-往目的站点发送请求-获取响应数据-渲染到浏览器中
2).爬虫原理:
模拟浏览器-往站点发送请求-获取响应数据-提取有价值的数据(需要解析库)-持久化到数据中
#浏览器发送的是http的协议
2.#爬取视频
import requests response=requests.get('https://video.pearvideo.com/mp4/adshort/20190625/cont-1570107-14054821_adpkg-ad_hd.mp4')#往视频源地址发送请求 print(response.content)#打印二进制流,比如图片,视频 with open('视频.mp4','wb') as f: f.write(response.content) #保存视频到本地
#请求方式:
GET:直接发送请求获取数据
POST:需要携带用户信息往目标地址发送请求
3.爬取豆瓣视频
'''
https://movie.douban.com/top250?start=0&filter=
https://movie.douban.com/top250?start=25&filter=
https://movie.douban.com/top250?start=50&filter=
2.解析数据
3.保存数据
'''
import requests
import re
# 1.发送请求
def get_page(base_url):
response = requests.get(base_url)
return response
def parse_index(text):
# print(res)
return res
def save_data(data):
with open('douban.txt', 'a', encoding='utf-8') as f:
f.write(data)
if __name__ == '__main__':
# num = 10
# base_url = 'https://movie.douban.com/top250?start={}&filter='.format(num)
for line in range(10):
base_url = f'https://movie.douban.com/top250?start={num}&filter='
num += 25
print(base_url)
response = get_page(base_url)
movie_list = parse_index(response.text)
# 数据的格式化
for movie in movie_list:
# print(movie)
# 电影排名、电影url、电影名称、导演 - 主演 - 类型、电影评分、评价人数、电影简介
v_top, v_url, v_name, v_daoyan, v_point, v_num, v_desc = movie
# v_top = movie[0]
# v_url = movie[1]
moive_content = f'''
电影排名: {v_top}
电影url: {v_url}
电影名称: {v_name}
导演主演: {v_daoyan}
电影评分: {v_point}
评价人数: {v_num}
电影简介: {v_desc}
\n
'''
save_data(moive_content)
4.selenium请求库:是一个自动化测试工具,可以通过代码实现浏览器自动执行相应的操作,可以跳过登陆验证,在下载请求库和chromedriver时遇到了些麻烦,详细已写在了day6中。
selenium的基本使用
from selenium import webdriver #导入键盘keys from selenium.webdriver.common.keys import Keys import time driver=webdriver.Chrome() #检测代码块 try: #隐式等待,等待标签加载 implicitly_wait():隐式等待 # 当使用了隐士等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常 # 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0 # 一旦设置了隐式等待,则它存在整个 WebDriver 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢, # 它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。 driver.implicitly_wait(10) #往京东主页发送请求 driver.get('https://www.jd.com/') #通过id查找input输入框,driver.find_element_by_id元素定位 input_tag=driver.find_element_by_id('key') #send_keys为当前标签传值 input_tag.send_keys('中华字典') #自动输入键盘的回车键 input_tag.send_keys(Keys.ENTER) #推迟执行10s time.sleep(10) #捕获异常 except Exception as e: print(e) #最后都会把驱动浏览器关闭掉 finally: driver.close()
打了一下午。。。有的操作步骤还是得参考保存的图片才行

浙公网安备 33010602011771号