对第一周实训的总结

在经过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=
1.发送请求
2.解析数据
3.保存数据
'''
import requests
import re
# 爬虫三部曲
# 1.发送请求
def get_page(base_url):
    response = requests.get(base_url)
    return response
# 2.解析文本
def parse_index(text):
    res = re.findall('<div class="item">.*?<em class="">(.*?)</em>.*?<a href="(.*?)">.*?<span class="title">(.*?)</span>.*?导演:(.*?)</p>.*?<span class="rating_num".*?>(.*?)</span>.*?<span>(.*?)人评价</span>.*?<span class="inq">(.*?)</span>', text, re.S)
    # print(res)
    return res
# 3.保存数据
def save_data(data):
    with open('douban.txt', 'a', encoding='utf-8') as f:
        f.write(data)
# main + 回车键
if __name__ == '__main__':
    # num = 10
    # base_url = 'https://movie.douban.com/top250?start={}&filter='.format(num)
    num = 0
    for line in range(10):
        base_url = f'https://movie.douban.com/top250?start={num}&filter='
        num += 25
        print(base_url)
        # 1.发送请求,调用函数
        response = get_page(base_url)
        # 2.解析文本
        movie_list = parse_index(response.text)
        # 3.保存数据
        # 数据的格式化
        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
            '''
            print(moive_content)
            # 保存数据
            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()

 打了一下午。。。有的操作步骤还是得参考保存的图片才行

posted @ 2019-06-30 21:08  洛塔  阅读(372)  评论(0)    收藏  举报