Python爬虫的学习——Python基础篇2

一、引言

        哈喽!我又双叒叕来辣!昨天白天我把前端要学习的内容整理了一下,昨晚和今早就在写这篇内容了哈哈。从明天开始我要进行前端(重心)和爬虫的双修之旅啦(doge)废话不多说,我们就开始剩下的基础部分的内容吧!

二、Python基础知识(基于爬虫需求)学习

        昨天我们讲到了for循环,书接上回,我们从一些数据类型的高级用法来开始、接着讲函数、文件操作,最后简单介绍下异常吧~ Here we go!

        1. 高级用法

        1.1 字符串的高级的用法

        这一个部分没什么好具体讲解的,主要就是函数的应用,如果一定有什么要注意的地方那就是使用的格式,这可能就是我想强调的地方。下面的部分主要以代码+运行结果截图为主,有特别需要注意的地方我会稍加解释滴

        (1) len(a) 获取字符串长度
s = 'China'
print(len(s))

        (2) .find() 查找内容,若存在则返回该内容在字符串中第一次出现的位置
s = 'China'
print(s.find('C')) # 这里会返回0,即与C语言的数组类似,下标初始值为0,终止值为长度减1
print(s.find('a'))

        (3) .startswith(a) .endswith(a) 判断字符串是否以某某开始/结束(满足则返回True,否则False)
s = 'China'
print(s.startswith('C'))
print(s.startswith('h'))
print(s.endswith('a'))
print(s.endswith('n'))

        这里主要是想说一下要注意函数名,start 和 end 后面有s哦,写函数时不要写漏了(虽然现在很多编辑器都有自动补全的功能,但笔者还是希望读者能在这个地方稍加注意!) 

        (4) .count(a) 计算字符串中某字符的出现次数
s1 = 'aaabb'
print(s1.count('a'))
print(s1.count('b'))

        (5) .replace(a, b) 替代内容
s2 = 'cccdd'
print(s2.replace('c','d')) # 该函数传进去的第一个参数为想要替换的原字符,第二个为想要的替换结果

        这里需要注意的是, 我们的 .replace(a, b) 是表示用b去替换a

        (6) .split(a) 切割字符串
s3 = '1#2#3#4'
print(s3.split('#')) # 按照#进行切割

        (7) .upper() .lower() 修改大小写
s4 = 'china'
print(s4.upper()) # 将所有字符转换为大写
s5 = 'CHINA'
print(s5.lower()) # 将所有字符转换为小写

        (8) .strip(a) 去除空格
s6 = '    a   '
print(len(s6)) # 空格页占字长,所以总长度为7
print(s6.strip()) # 去空格
print(len(s6.strip())) # 将s6去空格以后再统计长度

        通过上面几个例子,我们不难看出,几个函数都是在目标变量后用. 再加上这个函数(并传参)来使用 

        1.2 列表的高级的用法

               对于列表,我们有增、删、改、查四个操作,下面我们就一个一个来讲吧!

        (1) 增加元素
        1) .append(a)  在末尾添加元素
food_list = ['铁锅炖大鹅', '酸菜五花肉']
print(food_list)
food_list.append('小鸡炖蘑菇') # append括号里面加想添加的元素
print(food_list)

        2) .insert(目标位置,目标值)  插入
char_list = ['a', 'c', 'd']
print(char_list)
char_list.insert(1, 'b') # 第一个参数代表你想插入的目标位置,第二个参数代表想插入的值
print(char_list)

        3) .extend()  继承
num_list = [1, 2, 3]
num1_list = [4, 5, 6]
num_list.extend(num1_list)
print(num_list)

        即合并列表 

        (2) 删除元素
        1) del  根据下标进行删除
a_list = [1, 2, 3, 4, 5]
print(a_list)
del a_list[2] # 删除第三个元素
print(a_list)

        2) .pop()  删除最后一个元素
a_list = [1, 2, 3, 4, 5]
print(a_list)
a_list.pop() # 删除最后一个元素
print(a_list)

        3) .remove() 根据元素的值进行删除
a_list = [1, 2, 3, 4, 5]
print(a_list)
a_list.remove(4) # 删除值为4的元素
print(a_list)

        (3) 改变元素
city_list = ['北京', '上海', '深圳', '武汉', '西安']
print(city_list)
city_list[4] = '大连' # 将西安的值修改为大连,操作方法和C语言一样
print(city_list)

        这里具体的操作方法和C语言改变数组的某个具体的元素的值操作差不多,下标的表示方法和C也是一样的 

        (4) 查找元素
        1) in  存在则返回True,不存在返回False
food_list = ['锅包肉', '汆白肉', '东北乱炖']
food = input('Input the fod you wanna eat:\n')
if food in food_list: # in是判断某个元素是否在某一个列表中
    print('Exist!\n')
else:
    print('Not Exist!\n')

        2) not in 与 in 相反
ball_list = ['篮球', '台球']
ball = input('Input the ball you like:\n')
if ball not in ball_list:
    print('Not Exist!\n')
else:
    print('Exist!\n')

        1.3 元组的高级用法

        元组和列表类似,但元组中的元素不能进行修改、删除

        不过有一个点需要注意,那就是只有一个元素的元组的表示方法——我们还是要加上小括号(),但要在里面元素的后面加上一个英文的的逗号

## 只有一个元素的元组
a = (11, ) # 只有一个元素的元组需要在该元素后加上括号,不然会被识别为你输入的数据类型
print(type(a))
# 反例
b = (11)
print(type(b))

        查询和前面列表的方法是一样的

        1.4 切片

        切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组均支持切片操作

        切片的语法:[起始: 结束: 步长] 或简写为 [起始: 结束],同样需要注意这里的区间为左闭右开

s = 'hello world'

# 在切片中直接写一个下标
print(s[0])

print(s[0:4]) # 同理,结束部分为开区间,即整体的区间为左闭右开

print(s[1: ]) # 从起始的值一直到末尾

print(s[1: ]) # 从最开始的位置一直到结束值前面的一个元素

print(s[0: 6: 2]) # 指定步长为2

        1.5 字典的高级用法

        这里又是增删改查啦

        (1) 查找元素

        我们有两种访问方式:

        1) 用[ ]

        需要注意的是,用该方法查询不存在的信息时会报错

# 访问方式一(用[])
person = {'name': '大明', 'age': 28}
print(person['name'])
print(person['age'])

        在这里我就不演示查找不存在信息的例子了,希望读者能自行尝试,写一个字典并用该方法去尝试

        2) 用 .get(a) 函数
# 访问方式二(用.get())
person = {'name': '大明', 'age': 28}
print(person.get('name'))
print(person.get('age'))

        (2) 修改元素

        这里不允许用get函数了哦,具体的操作方法又和C语言对数组的操作很像啦:

person = {'name': '大明', 'age': 28}
print(person)
person['name'] = '法外狂徒' # 只允许用这个方法,不能用.get()
print(person)

        (3) 添加元素

         变量名字[键值] = 数据,但需要注意的是,当使用这种方法时,若这个键值在字典中不存在,则变成新增元素,存在则是对已有值进行修改

person = {'name': '大明', 'age': 28}
person['sex'] = '男'
print(person)

        (4) 删除元素
        1) del

        这里的del有两种用途:1. 删除指定的某个元素 2. 删除创立的这个字典对象

        接下来我们来分别演示一下吧!

        操作删除某个对象

person = {'name': '大明', 'age': 28}
del person['sex']
print(person)

        操作删除整个对象 

         这里会报错,因为我们已经删除了这个对象了,不能输出一个不存在的东西

del person
print(person) # 这里会报错,因为这个字典对象已经被全部删除了

        2) .clear()

        clear会删除里面所有的元素,但保留这个字典的结构(即剩下一个{})

# clear 删除里面的元素,但保留这个字典的结构
person.clear()
print(person)

 

        (5) 遍历元素        

        为了进行后续操作,我们先创立一个字典:

per1 = {'name':'老马', 'age':18, 'sex':'男'}
        1) 遍历字典的key

        这里要用 .keys() 函数,注意这里有s哦

# 遍历字典的key 用.keys()来获取字典中所有的key值
for key in per1.keys():
    print(key)
# 该例子中的key是随便起的名字,这个不影响遍历

 

        2) 遍历字典的value

        这里要用 .values() 函数,注意这里有s哦

# 遍历字典的value 用.values()来获取字典中所有的value值
for value in per1.values():
    print(value)
# 该例子中的变量value是随便起的名字,这个不影响遍历

        3) 遍历字典的key和value

        这里要用 .items() 函数,注意这里有s哦;同时这里遍历的有两个参数,这是读者需要注意的

for key, value in per1.items():
    print(key, value)
# 遍历字典的key和value 用.items()来获取字典中所有的key和其对应的value值

        4) 遍历字典的项(所谓的“项”就是指以逗号为单进行分隔的key和和其对应的value)

        还是 .items() 函数,但遍历的参数只有一个

for item in per1.items():
    print(item)
# 这里还是用.items()

2. 函数

       2.1 函数的定义

        这里就讲下格式就行了

        2.2 函数的调用

        我们根据上面的定义,来举个简单的例子并尝试在Python里调用

def f1():
    print('欢迎马大哥光临红浪漫!')
    print('男宾两位!')
    print('欢迎下次光临!')

## 函数的调用
f1()

        2.3 函数的参数

        这个部分和C语言差不多,同样也要注意形参实参的区分,在这里我就简单举几个例子就行了

        我们可以不传参数

def sum():
    a = 1
    b = 2
    print(a + b)
sum()

        结果显然为3,我就不运行结果截图了

        我们也可以在函数定义时在括号内写出形参

def sum1(a, b):
    print(a + b)
# 位置传参,即按照位置一一对应传参
sum1(100, 150)

# 关键字传参,即按照关键字一一对应传参
sum1(b = 100, a = 150)

        2.4 函数的返回

        即return,和C语言类似,跳过

        2.5 全局变量和局部变量

        和C语言类似,跳过

3. 文件操作

        3.1 文件的打开和关闭

        打开用.open()函数,关闭用.close()函数

        其中路径和HTML中访问的绝对路径和相对路径类似,两者都可以使用

        3.2 文件的读写

        操作和C语言很像,当我们当前路径下没有文档时,我们在相对路径下使用

open('test.txt', 'w') # 这样就在当前文件夹创建了一个名为test的文档(但不可以通过该方法创建文件夹)

就在当前文件夹创建了一个名为test的文档(但不可以通过该方法创建文件夹) 

        接下来就正式讲解读写操作了

        (1) 写

        写数据 用.write()函数书写

        和C语言类似,我们写是用 'w' 模式:

fp = open('test.txt', 'w') # 打开文件
a = input('Input the content you wanna write down in this txt')
fp.write(a) # 在文件里面书写内容
fp.close() # 表面上看似没任何区别,其实内存是不一样的哦

        但需要注意,我们open写完后,一定要记得close掉,虽然不close表面上没任何区别,但实则内存是不一样的哦 

        同时需要注意的是,'w' 是删除原有数据,重新在文档里书写内容

        如果是想在原有内容上继续添加内容(即追加),则用 'a' 模式

        我们先在文档中写一段内容

fp = open('test.txt', 'w') # 注意,'w'是删除原有数据,重新书写
fp.write('HIHI\n' * 5) # 代表写五次
fp.close()

        接着再追加内容

fp = open('test.txt', 'a') # 注意,'w'是删除原有数据,重新书写
fp.write('hello world, I\'m here\n' * 5) # 代表写五次
fp.close()

        (2) 读

        即 'r' 模式

        读数据,用.read()函数、 .readline()函数或者.readlines()函数读取,下面来分别讲

        我们先在文档中写一些内容

fp = open('test.txt', 'w') # 注意,'w'是删除原有数据,重新书写
fp.write('HIHI\n' * 5) # 代表写五次
fp.close()
        1) .read()
# 方法一
fp = open('test.txt', 'r')
print(fp.read())
fp.close()
# 默认情况下,.read()是一字节一字节地读,效率比较低下

 

        2) .readline()

        需要注意的是,这里的.readline()函数是一行一行地读,但他只读取一行,读完一行后函数调用停止

fp = open('test.txt', 'r')
print(fp.readline())
fp.close()

        只会读取一行,所以读取完一个“HIHI”后退出

        那么我们有没有将所有内容读完的函数呢,答案是有的有的 

        3) .readlines()

        .readlines()函数,一行一行地读,将所有内容读完,但最后会将读取的内容以列表的形式呈现

fp = open('test.txt', 'r')
print(fp.readlines())
fp.close()

        3.3 序列化和反序列化

        应用场景:使用scrapy框架时会返回一个对象,我们要将对象写入文件中要用这个方法(需要注意的是,这里说的是对象)

        需要注意的是,必须要先导入json模块才能用,即在代码开头写上

import json

        这里和C语言的开头写上# include<XXXX> 类似

        (1) 序列化

        定义:将对象(列表、字典、元组)变为字节序列

        序列化的方法:dumps()、dump()

        1) dumps()

# # 方法一:dumps()
fp = open('test.txt','w')
name_list = ['zs', 'ls']
names = json.dumps(name_list) # 将python对象变成json字符串,此时数据类型已由列表变成字符串
fp.write(names) # 将names写入文件
fp.close() # 关闭文件

         这里不难看出格式是有规律的,即json.dumps(内容) 

        2) dump()

name_list = ['zs', 'ls']
# 方法二:dump()
fp = open('test.txt', 'w')
json.dump(name_list, fp) # 第一个参数传入想写的内容,第二个参数传想写入的文件
fp.close()

         这里同样不难看出格式是有规律的,即json.dumps(内容,文件) 

        (2) 反序列化

        定义:将字节序列变为对象(列表、字典、元组)

        反序列化的方法:loads()、load()

        在开始前先说明一下,read读取的内容是字符串的形式

# 将json字符串变成一个python对象
fp = open('test.txt', 'r')
content = fp.read()
print(type(content))

        1) loads()

# loads()
result = json.loads(content) # 将json字符串变成一个python对象
print(type(result))
fp.close()

        2) load()

fp = open('test.txt', 'r')
result = json.load(fp) # 这里括号内传递的参数是文件
print(type(result))
fp.close()

        运行后就可以在控制台看到写进去的内容了 

4. 异常

        定义:程序在运行的过程中,由于我们代码不规范或者其他原因,导致程序无法正常运行,此时称为出现异常

        格式:

         来举个例子,在我们python代码的文件目录下创建一个名为 “ test.txt ” 的文档(该路径下只有一个文档文件)

         我们接下来试图在代码中运行一段代码对不存在的文档进行读写操作:

try:
    fp = open('nine.txt', 'r')
    fp.read()
except FileNotFoundError: # 文件没找到异常
    print('The system needs to be upgraded!\nPlease try it later!')

        由于我们的路径下不存在名为 “nine.txt” 的文档,是所以运行时会报错

三、结语

        好啦,本期到这里就结束噜,再次声明:本篇内容是基于爬虫需求而学习的Python基础知识,本人基础较差,是基于C语言的基础在学习Python(而且参照了网课),文章中难免会出现一些错误,如果读者发现有错误,还请及时私信我或者评论区留言,我看到后一定会虚心接受并及时修改!从明天开始我就要进行HTML5 + CSS的学习啦!HTML5我去年九月份的时候通过黑马的课程学习了的(已看完HTML5,CSS还没开始学),但现在有所遗忘,当务之急明天的任务是复习已学知识!同时我把自己要学的视频链接也附在介里啦~前端Web开发HTML5+CSS3+移动web视频教程,前端web入门首选黑马程序员_哔哩哔哩_bilibili

        感兴趣的小伙伴我们可以一起学习呀!!! 

        如果您都看到这里了,还不点赞收藏支持一下么?您的支持是我最大的动力!(doge)

        好啦,本篇到这里就结束噜~我们下期再见,拜拜了您嘞!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值