熊熊出没 发表于 昨天 18:25

Python爬虫学习前传 —— Python从安装到学会一站式服务

早上好啊,大佬们。我们的python基础内容的这一篇终于写好了,啪唧啪唧啪唧……
说实话,这一篇确实写了很久,一方面是在忙其他几个专栏的内容,再加上生存学业上的事儿,确实精力有限,另一方面,是这一篇的内容确实很多很难写,而且爬虫的内容确实是现学的,除了这一篇Python的基础内容,后续的内容还是在学习当中,不能写完第一篇之后停很久,所以第一篇就多预备了一些时间。
所以大佬们见谅,包涵小白兔学习本事弱,要徐徐学爬虫的内容,这个专栏的更新可能相较其他专栏的更新会慢很多。
前言

Python爬虫是Python语法的一个应用领域,把握Python的基本语法是编写爬虫的条件。同时,还需要了解和使用一些专门的库和框架来提高爬虫的效率和功能。
所以,总而言之,言而总之,要用Python写爬虫就需要先学会Python的基础语法。效仿浙里办理念——只用跑一次,我们只看这一篇,让大佬们入门Python。
https://i-blog.csdnimg.cn/direct/b26336e8abed4149adc15747fecf5804.png
一、简介 

       为了避免大伙想用Python爬虫但是又没有学过Python,我决定先出这么一篇博客,先来粗浅的讲讲我学的Python,纯新手向,大佬勿喷,不喜直接过。在写这篇博客的时候,我也还没有了解过爬虫是怎么实现的,后续的文章都是我现学现卖,大家勿喷,有错误也希望飘过的大佬能帮助办理一下。
https://i-blog.csdnimg.cn/direct/7c53dab7507e4e80b292865903f7e547.png        
        上面是我能想到的一些关于Python的内容,然后在本篇里面只会涉及基础入门部分的内容,一方面信赖大家实在只是想写一些简朴的爬虫去获取本身想要的内容,基本不会使用到高级编程部分的内容,所以学习那方面的内容远水解不了近渴,实在是划不来,另一方面是小白兔在高级编程方面也没有学习,可能等过一段时间会去学习这方面,如果大家想和小白兔一起学习这方面的内容,咱们到时候再出一个专栏来讲这些东西。
        在本篇文章中,我选用了与C语言举行类比的方式来教学Python的语法,但是为了让没有学过C语言直接学习Python的朋友也可以或许看懂,我努力多写了一些示例,让没有学过C语言直接学习Python的朋友也可以或许看懂。
https://i-blog.csdnimg.cn/direct/0d25c87a2f5d46769641eba4065a8a14.png
二、编译情况下载

        咱就是说,在学习任何一个语言之前都需要先下载它的编译情况,不然做啥都是捉瞎,所以在学习之前,咱们先讲一下怎么下载Python的编译情况,以及Pycharm的下载,官方提供了社区版和专业版,大家自行选择,然后在下面我们所需要下载的全部东西都已经通过网盘提供了。
夸克网盘链接:
链接:https://pan.quark.cn/s/3b873333e17d
提取码:txj3
1.Python情况下载

        可以直接在Python的官网直接下载,然后本篇文末也会有网盘链接,可以直接使用那个。
        在下载的时候比较重要的是,添加Python路径,最好是直接在下载的时候就直接勾选,也就是点击安装后下图所示的地方:https://i-blog.csdnimg.cn/direct/bc21488282d5447e97442f5a5bf97aad.png
https://i-blog.csdnimg.cn/direct/6b3eba75f3d543b6919e4519c7e43489.png
然后这样就安装好了。
可以win+R打开停止输入python,它显示内容就是安装成功,并且路径是对的,然后这边会显示python版本。
https://i-blog.csdnimg.cn/direct/5bd6add2be3c49f3aa46f56f3f4b2d90.png
如果你非常倒霉催的没有添加这个路径,那就只能说,在体系变量里面去添加这个。
https://i-blog.csdnimg.cn/direct/2936490a924741c4aed0d070d98df285.png
到这里,Python的情况变量就设置好了,然后就是下载Pycharm了。
2.Pycharm优势


[*] PyCharm 提供了代码补全、代码片段、智能代码导航等高级编辑功能,使得代码编写更加高效。
[*] PyCharm 可以或许及时查抄代码中的错误和警告,提供快速修复建议,帮助开辟者及时发现并修正题目。
[*] PyCharm 支持多种项目视图,可以清楚地构造和管理项目文件,方便开辟者快速定位文件和代码。
[*] PyCharm 内置了强盛的调试器和测试工具,支持图形化界面举行断点设置、变量查看和测试运行,简化了调试和测试过程。
[*] PyCharm 集成了 Git、SVN 等版本控制体系,方便开辟者举行代码版本管理。
[*] PyCharm 提供了数据库工具,支持连接和操作数据库,方便举行数据库开辟。
[*] PyCharm 支持长途开辟,可以连接到长途服务器举行开辟和调试。
[*] PyCharm 拥有一个丰富的插件市场,用户可以根据需要安装各种插件来扩展 IDE 的功能。
[*] 除了 Python,PyCharm 还支持其他语言,如 JavaScript、TypeScript、HTML、CSS 等,得当全栈开辟。
[*] PyCharm 提供了免费的社区版和付费的专业版,社区版已经包含了大部分常用功能,而专业版则提供了更多高级特性。
[*] PyCharm 的用户界面设计直观,易于上手,纵然是初学者也能快速适应。
[*] PyCharm 连续优化性能,确保在处置惩罚大型项目时也能保持良好的响应速率。
Pycharm有一个十分美满的Python编译情况,所以使用Pycharm可以让我们的代码编写变得更加便捷,所以Pycharm的下载还是十分有必要的。
Pycharm可以直接从Pycharm官网上下载,也可以直接从网盘里下载,然后里面有安装教程,小白兔都已经提供了。

https://i-blog.csdnimg.cn/direct/26d4f862dab64f5cb1df3d902579ba85.png
说实话,安装的步调很繁琐,但是俗话说的好嘛——“工欲善其事必先利其器”。所以先别开小差,重头戏如今才开始!!
           到这里你的前期工作就已经完成了,下面就可以开始基础地学习python的基础内容了,以下所教学的内容主要是帮助你们能看懂python的代码,和简朴语句的书写。
三、Python——基础知识

3.1解释:

    解释主要有两种情势:
        单行解释:#往后的内容都是解释内容
        多行解释:
                        """
                        中间全部的内容都是解释内容。        
                        """
 这是单行解释:
#这里是注释内容 这是多行解释:
"""
这是第一行注释
这是第二行注释
""" 然后还有一个就是在PyCharm里面用 Ctrl+/ 可以对选定的全部行 举行单行解释 和 取消解释。
 3.2变量:

这部分实在和其他语言都是一样的,但Python能支持中文定名,虽然一样平常都不会去使用。
Python 变量定名遵照一些基本规则和约定:

[*] 标识符必须以字母或下划线开头:变量名的第一个字符必须是字母(a-z,A-Z)或下划线(_),不能以数字开头。
[*] 标识符只能包含字母、数字和下划线:变量名可以包含字母、数字(0-9)和下划线(_),但不能包含空格、标点符号或特别字符。
[*] 区分大小写:Python 是区分大小写的编程语言,这意味着 Variable 和 variable 是两个差别的变量名。
[*] 保留关键字:不能使用 Python 的保留关键字作为变量名,例如 if、for、while、def 等。
[*] 避免使用特别方法名:尽管技术上可以,但最好避免使用 Python 的特别方法名(如 __init__、__del__ 等)作为变量名。
[*] 可读性和描述性:变量名应该具有描述性,可以或许清楚地表达变量的用途或存储的数据范例,以提高代码的可读性。
[*] 使用下划线分隔单词:在 Python 中,变量名通常使用下划线分隔单词,这被称为“snake_case”风格。
[*] 避免使用缩写:除非缩写是广泛承认的,否则最好使用完整的单词来提高代码的清楚度。
[*] 同等性:在同一个项目中,应该保持变量定名的同等性。
这部分和其他语言基本同等就不外多赘述了。
3.3数据范例:

https://i-blog.csdnimg.cn/direct/48e1e25dacd64f24a10135689e7712e7.png
在这里我们先主要讲一下基本数据范例,对于组合数据范例,我们会在下文里详细阐明。
对于整数,它有4种情势:十进制数,二进制数,八进制数,十六进制数
a = 123   #十进制
b = +123    #十进制
c = 0b1111011   #二进制
d = 0o173   #8进制
e = 0x7B    #16进制   检测数据范例的函数:type()
然后下面展示一下这几种范例:
a = 1
print(type(a))# <class 'int'> -- 整型

b = 1.1
print(type(b))# <class 'float'> -- 浮点型

c = 12.3+45.6j
print(type(c))#<class 'complex'> -- 复数型

d = True
print(type(d))# <class 'bool'> -- 布尔型 3.4输入输出:

   这部分主要是两个函数:
输入:input()
输出:print()
3.4.1输入:

        当程序实验到 input() 函数时,它会停息实验,等待用户在控制台输入数据。用户输入的数据被按下回车键后,input() 函数会将输入的数据作为字符串返回。
基本用法
user_input = input("请输入一些内容: ")
print("你输入的内容是: ", user_input) 在这个例子中,程序会显示 "请输入一些内容:" 并等待用户输入。用户输入的文本在按下回车键后会被赋值给变量 user_input,然后程序会继承实验并打印用户输入的内容。
参数
input() 函数可以继承一个可选的字符串参数,这个字符串会作为提示信息显示给用户。
name = input("请输入你的名字: ")
print("你好, ", name) 返回值
input() 函数总是返回一个字符串范例的值,纵然用户输入的是数字。如果需要将输入转换为其他范例(如整数或浮点数),你需要使用范例转换函数,如 int() 或 float()。
age = input("请输入你的年龄: ")
age = int(age)# 转换为整数
print("你输入的年龄是: ", age) 注意事项


[*]如果用户输入的数据无法转换为所需的范例,程序会抛出非常(如 ValueError)。因此,在使用范例转换时,可能需要举行错误处置惩罚。
[*]input() 函数在读取输入时不会举行任何验证,所以如果需要验证输入,应该在获取输入后举行。
[*]在交互式情况(如Python的交互式解释器)中,input() 函数的举动与在脚本中运行时相同。
3.4.2输出:

print() 函数用于将信息输出到控制台。它非常灵活,可以打印各种范例的数据,并且可以格式化输出。
基本用法
print("Hello, World!") 多个参数
print() 可以同时打印多个参数,参数之间默认用空格分隔。
name = "Alice"
age = 30
print("Name:", name, "Age:", age) 分隔符(sep参数)
可以使用 sep 参数来指定参数之间的分隔符,默以为一个空格。
print("Python", "Java", "C++", sep=", ") 结尾字符(end参数)
可以通过 end 参数指定 print() 函数在输出结束后的结尾字符,默以为换行符 \n。
print("Hello, World!", end=" ")
print("Welcome to Python.") 3.4.3格式化输出

print() 函数支持多种格式化字符串的方式:
百分号(%)格式化
name = "Alice"
age = 30
print("Name: %s, Age: %d" % (name, age)) str.format() 方法
name = "Alice"
age = 30
print("Name: {}, Age: {}".format(name, age)) f-string(Python 3.6+)(个人感觉这个不好用)
name = "Alice"
age = 30
print(f"Name: {name}, Age: {age}") 格式化符号:
   格式化符号格式符号转换%s字符串%d有符号十进制整数%f浮点数%c字符%u无符号十进制整数%o八进制整数%x(X)十六进制整数 小写ox(大写OX)%e(E)科学计数法e(E)%g(G)%f(F)和%e(E)的简写 转义字符


[*] \n:换行。
[*] \t:制表符,一个tab键(4个空格)的距离。
3.5运算符:

算数运算符

   算数运算符符号描述+加-减*乘**指数/除%取余//整除 我们拿C语言举行对比来讲一下这些,基础的 加 减 乘 取余都是一样的,然后在Python中多出了指数运算,然后对于 / 这个类似于C语言中的浮点数除法,会有小数位,然后整数除法是 // 是没有小数位的。
a = 5
b = 2

#加
print(a+b) # 7
#减
print(a-b)# 3
#乘
print(a*b)# 10
#整除
print(a//b)# 2
#取余
print(a%b)# 1
#除
print(a/b)# 2.5
#指数
print(a**b)# 25

#然后对于一些比较特殊的情况,我这边也展示一下,可能并不完全。
print(5.0 // 2) # 2.0
print(5.0 % 2) #1.0
print(5.0 ** 2) #25.0
#在这些时候他们的返回值也是浮点型 赋值运算符

   赋值运算符=赋值 这个和C语言中类似,我们就不多说了。
复合赋值运算符

   复合赋值运算符符号描述+=加法赋值运算符-=减法赋值运算符*=乘法赋值运算符/=除法赋值运算符%=取余赋值运算符//=整除赋值运算符**=指数赋值运算符 对于这一部分,也是和C语言类似,然后也就是先运算等号右侧的值,然后与左侧的值举行相应运算得出结果。然后在Python中删除了C语言中的单目运算符 ++ 和 -- 也就是自增自减操作,下面举一些例子来展示一下。
c = 5
d = 5

#指数赋值运算符
c **= (5-1)/2
print(c) #25.0

#整除赋值运算符
d //= 6-4
print(d) #2 比较运算符

   比较运算符符号 描述
== 等于。如果两个操作数的结果相等。
则条件结果为真(True),否则条件结果为假(False)
!= 不等于 。如果两个操作数的结果不相等。
则条件为真(True),否则条件结果为假(False)
> 运算符左侧操作数结果是否大于右侧操作数结果。
如果大于,则条件为真(True),否则为假(False)
>= 运算符左侧操作数结果是否大于等于右侧操作数结果。
如果大于,则条件为真(True),否则为假(False)
< 运算符左侧操作数结果是否小于右侧操作数结果。
如果小于,则条件为真(True),否则为假(False)
<= 运算符左侧操作数结果是否小于等于右侧操作数结果。
如果小于,则条件为真(True),否则为假(False)
这些运算符的使用和C语言中是同等的,那么咱们讲一讲使用时不一样的点,就是说Python中你是可以或许连续使用的,这样说很不直观显着,咱们直接在代码里展示一下。
如果要判断一个 英语字母 是不是 大写,这时候判断条件怎么写?
先来一段C语言的代码:
#include <stdio.h>

int main()
{
    char x = 'H';
    if (x>='A' && x<='Z') //主要看这里的判断条件
    //我们在判断的时候是不是要用 && 将两个判断连起来
      printf("YES!!!");
    return 0;
}
然后咱们看一下Python的代码:
x = 'H'
if ('A'<=x<='Z'): #在这里我们就不需要用与运算符将两个条件连接起来,直接可以连续使用。
    print("YES!!!") 这就是一个C语言和Python的小区别。
逻辑运算符

在逻辑运算符这部分,Python和C语言的差异就比较大了,咱们直接和C语言举行类比。
   逻辑运算符符号类比C语言运算符and&& or
||not! 基本效果是一样的,主要就是在写法上面有所区别,相对于C语言使用符号来表达逻辑的情势,Python直接使用了对应寄义的英文单词,让可读性更上一层楼,固然这里不是吹捧,只是在描述一个征象,语言是没有优劣之分的,只有更得当某一方面的说法。
对于这部分逻辑运算符的部分,对于这部分我们需要用到 if 语句,如果不知道寄义的可以先看看下面的分支语句的内容然后在返回看这里的内容,我们也举行简朴的展示。
if 10 > 20 and 5 < 10:
    print("第一个示例YES!!!") #不会输出

if 10 > 20 or 5 < 10:
    print("第二个示例YES!!!") # 会输出

if not 10 > 20:
    print("第三个示例YES!!!") # 会输出
然后对于逻辑运算这里,对于C也好Python也好,and和or会有短路举动
   当使用 and 运算符时,如果第一个条件为假(False),则整个表达式的结果已经确定为假,因此 Python 不会评估后续的条件。这是由于 and 运算符要求全部条件都为真,整个表达式的结果才为真。

当使用 or 运算符时,如果第一个条件为真(True),则整个表达式的结果已经确定为真,因此 Python 不会评估后续的条件。这是由于 or 运算符只要有一个条件为真,整个表达式的结果就为真。
对于这点我们也展示一下。
#and的短路行为

def run_1():
    print("运行了run_1")

def run_2():
    print("运行了run_2")

# 第一个条件为假,因此不会执行第二个条件
if False and run_1():
    pass
else:
    run_2()

"""
上面的语句 不会运行run_1()函数 会运行run_2()函数

下面的语句两个函数都会运行
"""

# if True and run_1():
#   pass
# else:
#   run_2() #or的短路行为

def run_1():
    print("运行了run_1")

def run_2():
    print("运行了run_2")

# 第一个条件为假,因此不会执行第二个条件
if True or run_1():
    pass
else:
    run_2()

"""
上面的语句 不会运行run_1()函数 会运行run_2()函数

下面的语句两个函数都会运行
"""

# if False or run_1():
#   pass
# else:
#   run_2() https://i-blog.csdnimg.cn/direct/dac13129c24e4078a5af0f53799f9775.png
如今还没有到疲惫的时候,再加把劲咯。
四、Python——流程控制

   对于这部分,大要都和C语言类似,然后咱们会重点提一下C语言里差别的部分。
4.1顺序结构

就相当于妈妈给了你一个菜单,让你去买菜,要从上往下一个一个买,不能跳过其中一个,先买下一个菜。
这个部分就是按照代码的上下行顺序举行代码的运行,这里就不多说这个结构了。
4.2分支结构

就相当于,妈妈问你想吃 红烧肉 还是 宫保鸡丁,你就得开始想我本日想吃那个,然后再去买其中一个的质料。
分支语句也就是if……elif……else……语句。
   if 判断条件:
        代码块
        ……
括号内表示无关紧要,不能没有 if 语句然后直接出现 elif 和 else。

elif 判断条件:
        代码块
        ……
else:
        代码块
        ……

这部分实在Python和C语言是一样的,就是C语言里面是else if在Python里面是elif,本质是差不都的。
然后按照惯例,下面展示一下这个语句的使用方法。
#单if语句
x = 10
if x > 5:
    print("x is greater than 5")

#if……elif……语句
x = 20
if x > 30:
    print("x is greater than 30")
elif x > 10:
    print("x is greater than 10 but less than or equal to 30")

#if……elif……else……语句
x = 20
if x > 30:
    print("x is greater than 30")
elif x > 10:
    print("x is greater than 10 but less than or equal to 30")
else:
    print("x is 10 or less")

#if……else……语句
x = 5
if x > 10:
    print("x is greater than 10")
else:
    print("x is 10 or less") 然后和C语言一样的,它也是可以嵌套使用的。
#嵌套使用
x = 5
if x > 10:
    print("x is greater than 10")
elif x > 5:
    if x < 8:
      print("x is between 5 and 8")
    else:
      print("x is 8 or greater but less than 10")
else:
    print("x is 5 or less") 4.3循环结构

你玩原神想抽 凌华 ,但是你一直没抽到,但是你不甘心呐,发誓要一直抽一直抽直到抽到老婆为止,无穷无尽直到抽到为止才停下。
Python中循环有两种方式,for循环和while循环。
while循环

咱们先讲一下while循环,这个和C语言里面基本一样平常无二。
   while 循环条件:
        循环体
        ……
# 初始化计数器
counter = 1

# 使用while循环直到计数器达到6
while counter <= 5:
    print(counter)
    counter += 1# 每次循环增加计数器的值 还有一种比较常用的方法就是:
   while True:
这种方法就是一个死循环,由于while是在判断条件为真时进入循环,而此时的条件是True也就是一直为真。
for循环

   for循环比较常见的两种写法:
1.for i in range(100):
        循环体
        ……

2.for i in list:
        循环体
        ……
for循环在Python中的使用和在C语言中的使用出入还是很大的,在python中for循环的实现是采用的迭代的方式实现的,固然这在本篇中不重要,咱们只需要知道for循环是这么写的就行了。
那么言归正传,我们来讲一下这里面出现的一些内容。
首先是在for循环第一种写法中出现的 range() 函数;
   range() 函数可以接收一到三个参数,分别是:

[*]start(起始值,默以为0):序列的起始值。
[*]stop(结束值):序列的结束值,但不包罗这个值本身。
[*]step(步长,默以为1):序列中每一项之间的差。
下面我把range函数的三个参数的实现展示一下:
#只写一个参数,会默认是stop位置的值
for i in range(5):
    print(i)
print("-------------------------")

#写两个参数会默认是start和stop的值
for i in range(2, 5):
    print(i)
print("-------------------------")

#三个值都写
for i in range(1, 6, 2):
    print(i)
print("-------------------------")

#还有一个比较常用的方式就是step的值为负数
for i in range(5, 0, -1):
    print(i) 结果:
0
1
2
3
4
-------------------------
2
3
4
-------------------------
1
3
5
-------------------------
5
4
3
2
1 然后是第二种方式,它是一种内容循环,从字符串、列表、字典等内容中逐个索取元素对i赋值举行遍历。
对于这种方式咱们在背面讲这些数据结构的时候再细说。
在循环结构中常用的一些函数

1.break
强行跳出该循环,在循环中一旦实验这个函数会直接跳出该循环。
#break
for i in range(10):
    print(i)
    if i == 5:
      break
"""
输出
0
1
2
3
4
5
""" 2.continue
continue 关键字用于跳过当前循环的剩余部分,并立即开始下一次迭代。也就是说,当 continue 被实验时,循环体中 continue 之后的代码将不会实验,并且控制流将直接跳转到循环的开始,举行下一次迭代的条件查抄。
#continue
for i in range(10):
    if i % 2 == 0:
      continue
    print(i)
"""
1
3
5
7
9
""" 3.enumerate
循环的时候自带计数(从0开始),它用于将一个可迭代对象(如列表、元组、字符串等)组合为一个索引序列,同时列出数据和数据下标。这在循环遍历可迭代对象时非常有用,尤其是当你需要在循环中使用索引时。
   enumerate(iterable, start=0)


[*]iterable:一个可迭代对象,如列表、元组、字符串等。
[*]start(可选):一个整数,指定索引的起始值,默以为0。
#enumerate
for p, i in enumerate(range(5)):
    print(p, i, sep=':')
print("----------------------")

list =
for i, num in enumerate(list):
    print(i, num, sep=':')
print("----------------------")

my_dict = {'a': 1, 'b': 2, 'c': 3}
for key, value in enumerate(my_dict):
    print(key, value)

"""
结果:
0:0
1:1
2:2
3:3
4:4
----------------------
0:12
1:15
2:20
3:25
4:30
5:35
----------------------
0 a
1 b
2 c
""" 4.zip
循环的时候归并多个列表,它用于将多个可迭代对象(如列表、元组、字符串等)“压缩”成一个元组列表。每个元组包含来自每个可迭代对象的相应元素。如果可迭代对象的长度不等,zip() 会制止在最短的可迭代对象结束时。
   zip(*iterables)


[*] *iterables:一个或多个可迭代对象。
#zip
list1 =
list2 = ['a', 'b', 'c']
for i, j in zip(list1, list2):
    print(i, j)

"""
结果:
1 a
2 b
3 c
""" 循环中的else

在循环背面写else,这是在C语言代码里面闻所未闻的吧,但它在Python中却是存在的一种写法,在前面循环中的常用函数里咱们认识了一个函数break,它能让循环强行停止,也就是非正常退出。而在循环背面的else可以或许判定与它相连的循环是不是非正常退出。
基本写法如下:
while 条件:
    # 循环体
else:
    # 当循环条件不再为真时执行的代码块 for 元素 in 可迭代对象:
    # 循环体
else:
    # 当循环正常结束时执行的代码块 下面演示一下在循环中else的使用:
#没有break的else
count = 0
while count < 3:
    print(count)
    count += 1
else:
    print("循环正常结束,没有遇到break")

"""
0
1
2
循环正常结束,没有遇到break
""" #有break的else
count = 0
while count < 3:
    print(count)
    count += 1
    if count == 2:
      break
else:
    print("循环正常结束,没有遇到break")

"""
0
1
""" #没有break的else
for i in range(3):
    print(i)
else:
    print("循环正常结束,没有遇到break")

"""
0
1
2
循环正常结束,没有遇到break
""" #有break的else
for i in range(3):
    print(i)
    if i == 1:
      break
else:
    print("循环正常结束,没有遇到break")

"""
0
1

""" 由于在一样平常的情况不怎么会用,我就不多说这个。
   下面的内容就是python中的数据范例,是本篇中的重中之重,一定好好看喔!!!
https://i-blog.csdnimg.cn/direct/86f7a648bcc04537a3c3683acb235335.png
五、字符串

5.1基本操作符

以下实例中的参数 st1= 'cde', st2 = 'abcdfg';
   字符串的基本操作符操作符描述实例结果s1+s2连接。将两个字符勾通接stl+st2'cdeabcdefg'n*s或s*n复制。对字符串 s 复制 n次3*stl'cdecdecde's1 in s2 子串测试。s1 若是 s2 的子串,
返回 True,否则返回 False
stl in st2Trues索引。取索引号为i的字符st2或 st2[-4]ds切片。返回索引号 start 到 end,但不包罗 end 的子串;省略 start表示重新开始,省略 end 表示取到结尾;step 为步长,省略为 1st2[:-4]
st2[:6:2]
st2[:]abc'
ace'
'abcdefg' 然后我们主要说一下索引和切片:
首先是索引:
字符串中的每个字符都是有索引号的,通过索引号和索引操作符 “ [ ] ” 可以获取单个字符。索引有两种表示方式: 正向递增和反向递减,风俗用正向。
https://i-blog.csdnimg.cn/direct/461dd7ffcc3f4b73b40dee665f1d0e35.png
然后是切片:
实在从本质来讲切片和索引是一样的,区别就只在于返回的是一个值还是一部分值。
切片语法:s;
作用:对字符串取以 start 为起始、end 为结束但不包罗 end,即取[start,end)区间的以 step 为步长的子串。其中 start、end、step 均可以省略,但至少保留一个冒号省略 start 表示0重新开始取,省略 end 表示到最后,省略 step 步长为1。
下面演示一下这两个:
st = 'Python is a good programming language'
#索引:
print(st)
print(st)
print(st[-1])
print(st[-4])

#切片
print(st[:5])
print(st)
print(st)
print(st)
print(st[::2])
print(st[::-1])
print(st[::-2])
print(st[-5:-1])


"""
P
n
e
u
Pytho
Pytho
yhni
to sago rgamn agae
Pto sago rgamn agae
egaugnal gnimmargorp doog a si nohtyP
eaga nmagr ogas otP
guag
""" 5.2常用方法

首先,这里提到了一个词——方法。
Python 中每一个数据范例都有一个对应的内置类,每新建一个数据,现实就初始化并天生一个对象。体系为对象提供了一些方法便于功能处置惩罚。
   方法引用格式——字符串对象,方法(参数)
    注意事项    ——方法作用于对象,方法引用的结果,不改变引用对象。
以下实例中的参数:st='ABC DEFG BC'
   字符串常用方法分类方法描述实例结果统计
查找S.count(c)在字符串中统计 c 出现的个数st.count("B")2S.find(c)在字符串中找第一个出现 c串的位置,找不到返回-1sl.find("BB")-1S.index(c)在字符串中找第一个出现 c子串的位置,找不到抛出
非常s1.index("BC")1更换
分离
连接S.strip(c)去掉字符串两旁的c 子串,一样平常用于去掉空格,省略c表示空格"123 ".strip()'123'S.replace(old,new)将字符串中new子串更换old子串sl.replace("BC","WYZ")'AWYZ DEFG WYZ'S.split()将字符串按照 c 分隔符分离,返回结果是列表。省略 c 按空格、制表符或换行符分隔s2="a 12 34"
s2.split()
s2.split(" ")['a','12' ,'34']
['a',' ', '12','34']c,join(L)将 L 序列的字符串元素以字符 c为分隔符连接成字符串1st=
";" join(lst)'a;12;34'转换
测试S.lower()全部转换成小写字母st.lower()'abc defg bc'S.upper()全部字母大写"who".upper()'WHO'S.title()将字符串的全部单词首字母大写,别的字母小写"who are yoU".title()'Who Are You'S.isnumeric()字符串全部是数字,返回 True;否则返回False st.isnumeric()
"123"isnumeric)
False
True
S.isalpha()字符串全部是字母,返回 True;否则返回 Falsesl.isalpha()
"asDF".isalpha()False
True 然后对于这部分,内容是比较多的,我主要说几个在爬虫中处置惩罚数据时比较常用的:
test='   python is s good language!   '
#strip方法:
print(test.strip())
print(test.lstrip())
print(test.rstrip())
print("-------------------------------------------------")

#replace方法:
print(test.replace('python','黑不拉几的小白兔').replace('language','博主'))
print("-------------------------------------------------")

#split方法:
print(test.split(' '))
print(test.split(' '))
print("-------------------------------------------------")

#upper & lower方法:
print(test.upper().lower())
print("-------------------------------------------------")

#find方法:
print(test.find('p'))
print(test) #取该字符右侧内容
print("-------------------------------------------------")

#len()函数:
print('test的字符长度是:',len(test))
print("-------------------------------------------------")


"""
python is s good language!
python is s good language!   
   python is s good language!
-------------------------------------------------
   黑不拉几的小白兔 is s good 博主!   
-------------------------------------------------
['', '', '', 'python', 'is', 's', 'good', 'language!', '', '', '']
python
-------------------------------------------------
   python is s good language!   
-------------------------------------------------
3
python is s good language!   
-------------------------------------------------
test的字符长度是: 32
""" https://i-blog.csdnimg.cn/direct/e48564db95504bc397bae27f5c27172f.jpeg
如果我本日必有一死,那一定是Python
六、列表

这个我自以为是Python中最好用的结构——列表,列表是一个可变数据范例。
6.1列表的创建

(1)使用 “ [ ] ” 建立列表

通过 “ [ ] ” 内不带数据的方式将产生空列表;通过 “ [ ] ” 内以逗号分隔的数据将产生包含数据的列表。列表的元素还可以是列表构成的嵌套列表,如同传统数组中的二维数组。
(2)使用 list 函数建立列表

使用 list 函数也可以建立空列表、有数据列表,还可以将其他数据范例转换成列表,甚至还可以天生由 range 函数产生的有序序列。
下面展示一下两种创建方法:
"""
列表创建
"""
#直接用[]进行创建
lst = [] #空列表创建
lst1 = ['dsa', 123, 'sda', ]
print(lst1)

#使用list 函数
lst = list() #空列表创建
lst2 = list("hello")
lst3 = list(range(10))
print(lst2)
print(lst3)
#这里比较常见的比如说和map(), input()函数结合使用
lst4 = list(map(str, input().split()))
print(lst4)


"""
['dsa', 123, 'sda', ]
['h', 'e', 'l', 'l', 'o']

123 sad d155 dsa 这里是输入
['123', 'sad', 'd155', 'dsa']
""" https://i-blog.csdnimg.cn/direct/51573a7cf0584d66aec1d18cc4816d75.png
6.2列表的访问

列表中的每个元素都有对应的索引号,用正向索引或者反向索引可以访问列表中的元素,这点与字符串操作是同等的。
   (1)对一维列表L,元素访问格式为:
L[索引]
    (2)对二维列表 L的每个元素,可以为每个维度使用一个[],元素访问格式为
L[行索引] ------------->这是索引列表内的某一个列表
L[行索引][列索引]--->这是索引列表内某一个列表的值
"""
列表访问
"""
lst5 = ['dsa', 123, 'sda', ]
print(lst5)
print(lst5)
print(lst5)
print(lst5[-3])


"""
dsa

13
123
""" 6.3列表遍历

在这里咱们先来回顾一下循环的内容,在循环中我们不是展示了两种方式嘛,一种通过range函数举行的遍历,以及直接的内容遍历。在这里,了解完list的内容之后,我们再来看看这个代码,大家可以重新理解一下。
https://i-blog.csdnimg.cn/direct/7f7d73ac962a4f0ba51c5e7c5c63fd23.png
lst6 = ["I", "am", "a", "Bunny", "Girl"]
for i in range(len(lst6)): #len函数是获取长度,在后面会详细说的
    print(lst6)
print("-------------------------------------")

for i in lst6:
    print(i)
print("-------------------------------------")

for i, item in enumerate(lst6):
    print(i, item) 结果: 
"""
I
am
a
Bunny
Girl
-------------------------------------
I
am
a
Bunny
Girl
-------------------------------------
0 I
1 am
2 a
3 Bunny
4 Girly
""" 6.4列表的常用操作

(1)切片

   列表切片是指从 列表的片段中 取出形成列表,其格式为:
列表
作用:取列表中左闭右开的片段。在Python中险些全部的范围都是左闭右开。
省略start则为0; 省略end 取到列表最后省略; step 则步长为1;
全部省略取全部列表。
在这里,我们要提一下string字符串,列表切片与字符串切片关键差别之处 —— 列表切片有赋值操作而字串没有。
由于字符串是不能被修改的,所以不可以对字符串举行切片赋值操作。而列表是可修改的,通过切片赋值操作,方便实现对列表插入、删除、修改等护操作。
那么我们看一下列表的切片操作吧!~
lst7 =
print(lst7)
print(lst7)
print(lst7)
print(lst7[:5:2])
print(lst7[::2])
print(lst7[::])
print("-------------------------------------")

#可以使用切片实现以下操作
#插入操作, 会覆盖切片范围内的内容,再添加上新的内容
lst7 = #由于切片区域没有数据,所以没有内容被覆盖
print(lst7)
lst7 = #会将索引值为 1 位置的数删除,然后添加上新数据
print(lst7)
print("-------------------------------------")

#删除,其实和插入操作类似,只是将插入的列表设置为空
lst7 = []
print(lst7) 结果:
"""






-------------------------------------


-------------------------------------

""" (2)运算

大佬们,1+1等于多少?
2?不对喔,是11。
这是曾经网上的一个段子,但是在Python中的列表它是对的喔~
list 里有三个运算:
   连接“+”、复制“*”、测试“in”
我们来看看Python里面怎么让1+1变成11吧!~
# 连接 “+”
lst8 = #1
lst9 = #1
print(lst8 + lst9) # 1+1 = 11咯

# 复制“*”
lst10 =
print(lst10 * 3)

# 测试“in”
lst11 =
if 31 in lst11:
    print("yes")
else:
    print("no")
if 45648 in lst11:
    print("yes")
else:
    print("no")  结果:
"""


no
yes
"""
(3)删除

如果有个人你不想见到了,你会怎么做,没错给他微信删了!!
在 list 里如果有个元素你不想要了,也是可以直接删除的。
   del 列表
del 列表[索引]
作用:“del 列表”语句用于删除整个列表,“de! 列表[索引]”语句用于删除列表中的元素。
lst12 =
del lst12
print(lst12)
del lst12
print(lst12)
del lst12
#print(lst12)
#NameError: name 'lst12' is not defined. 结果:
"""


"""
6.5列表的常用函数

   (1)、若列表中的元素是字符串,求最大值是按元素首字母举行比较,大者则该元素大;否则再按第2个字符举行比较,直到比出大小。求最小值和排序均按此规则。
(2)、函数操作结果有返回值,但不会改变参数中的值
   常用函数分类函数寄义统计max(L)返回列表中最大值min(L)返回列表中最小值len(L)返回列表长度sum(L)返回列表各元素和排序sorted(L)返回排序后的列表,默以为升序;如有reverse=True参数,则为降序 (1)max() && min() && sum() && len()

lst13 =
lst14 = ['bunny', 'girl', 'breakfast', 'lunch', 'noodle', 'dinner']
lst15 = [, 4, 5, ]
print(max(lst13))
print(max(lst14))

print(min(lst13))
print(min(lst14))

print(len(lst13))
print(len(lst14))
print(len(lst15)) #可以想一下这个是多少哦

print(sum(lst13)) 结果:
"""
49
noodle
1
breakfast
9
6
4
98
""" (2)sorted()

在sorted里面有两个关键字:key、reverse
   对于key关键字:通过关键字 key 确定内嵌的一维列表的某个元素,排序时一样平常通过 key 指定的lambda函数举行。
对于reverse关键字:通过它来举行 升序 和 降序 的修改。
lst16 =
sorted(lst16, reverse=True)
print(sorted(lst16, reverse=True))
print(sorted(lst16, reverse=False))
print(lst16) #sorted是函数,它不会修改原列表,而是生成新的列表
print("-------------------------------------")
#如果说我们要按照列表中每个列表里的第二个元素进行排序
lst17 = [['皮卡丘', 15], ['小火龙', 13], ['水箭龟', 35], ['耿鬼', 67], ['妙蛙种子', 5]]
print(sorted(lst17, reverse=True, key=lambda x: x))
print("-------------------------------------")  结果:
"""



-------------------------------------
[['耿鬼', 67], ['水箭龟', 35], ['皮卡丘', 15], ['小火龙', 13], ['妙蛙种子', 5]]
""" (3)zip() 和 enumerate()

这个在前面讲循环的时候有提到过,这里我们在学了列表的内容之后再来看看它们的其它作用。
   zip()


[*]定义:zip()是 Python 内置函数,它可以将多个可迭代对象(如列表、元组、字符串等)中对应的元素打包成一个个元组,然后返回由这些元组组成的迭代器。如果可迭代对象的长度差别等,zip()会以最短的可迭代对象为准。
[*]基本语法:zip(iterable1, iterable2,...)

enumerate()


[*]定义:enumerate()是 Python 内置函数,它可以将一个可迭代对象组合为一个索引序列,同时返回一个枚举对象,该对象包含了元素的索引和元素本身。
[*]基本语法:enumerate(iterable, start=0),其中start参数是起始索引,默以为 0。

lst18 =
lst19 = ['a', 'b', 'c']
zipped = zip(lst18, lst19)
print(list(zipped))
print("-------------------------------------")

lst20 = ['apple', 'banana', 'cherry']
enumerated = enumerate(lst20)
print(list(enumerated))



"""
[(1, 'a'), (2, 'b'), (3, 'c')]
-------------------------------------
[(0, 'apple'), (1, 'banana'), (2, 'cherry')]
""" 6.6列表的常用方法

大家是不是在这里懵了一下,上面不是刚说了常用函数吗?这里怎么又有方法,两个有什么不一样?
实在对于一个class来说,两种是有差异的,但是对于入门而言,我们不需要了解那么多。
OK,言归正传,我们目前需要知道的就是两者的调用方式差别即可:
   函数:
函数(参数)
例如说前面的 max( ) 函数,我们调用方法是,max(lst),列表是作为参数进入max()函数内的。

方法:
列表对象.方法(参数)
它是将列表作为主体对它举行操作,还有一个点,就是方法是直接对列表举行操作,是没有返回值的。
下面列举几个比较常用的列表方法:
(1)lst.append(object)

    在列表对象的结尾,加上新对象 object。
(2)lst.sort()

   将列表对象中的元素依照大小顺序排列。
(3)lst.count(value)

   针对列表对象中的相同元素值 value 盘算其数目。
(4)lst.extend(list)

   将参数 list 列表对象中的元素加到此列表中,成为此列表的新元素。
(5)lst.index(value)

   将列表对象中元素值为 value 的索引值返回。
(6)lst.insert(index, object)

   将在列表对象中索引值为index的元素之前插入新元素object。
(7)lst.reverse()

   将列表对象中的元素颠倒排列。
(8)lst.pop()

   将列表对象中索引值为 index 的元素删除。如果没有指定 index 的值,就 将最后一个元素删除。
(9)lst.remove(value)

   将列表对象中元素值为 value 的删除。
方法的使用和函数使用类似,所以就简朴展示一下——
 
lst21 =
lst21.append(18)
print(lst21)
lst21.append() #它能够在列表中添加上列表等,作为一个独立的元素处在列表中
print(lst21)
"""

]
"""
print("-------------------------------------")

lst22 =
lst22.sort(reverse=False) #默认是递增顺序,可以用reverse关键字改变
print(lst22)
"""

"""
print("-------------------------------------")

lst23 =
print(lst23.count(1))
print(lst23.count(2))
print(lst23.count(3))
"""
4
3
2
"""
print("-------------------------------------")

lst24 =
lst24.extend()
print(lst24)
"""

"""
print("-------------------------------------")

lst25 =
print(lst25.index(21))
"""
3
"""
print("-------------------------------------")

lst26 =
lst26.insert(3, 123)
print(lst26)
"""

"""
print("-------------------------------------")

lst27 =
lst27.reverse()
print(lst27)
"""

"""
print("-------------------------------------")

lst28 =
lst28.pop(3)
print(lst28)
lst28.pop()
print(lst28)
"""


"""
print("-------------------------------------")

lst29 =
lst29.remove(20)
print(lst29)
"""

""" 6.7列表推导式

这部分的内容很故意思,但个人以为不是很重要,大家了解能这么写就好,在爬虫里面实在它没有那么重要至少。
基本语法



[*]基本的列表推导式的情势是[表达式 for 变量 in 可迭代对象]。
lst1 =
print(lst1) """

""" 带有条件的列表推导式



[*]列表推导式还可以包含条件语句,语法是[表达式 for 变量 in 可迭代对象 if 条件]。
lst2 =
print(lst2) """

""" 嵌套的列表推导式



[*]列表推导式可以嵌套使用。
lst3 = [ for i in range(3)]
print(lst3) """
[, , ]
""" https://i-blog.csdnimg.cn/direct/27701e64ebcf43a29e07b7c5a8b1b3c8.gif

不可,要长脑筋了
 列表的内容很多,大家可以徐徐学,徐徐试试。
七、字典

字典你真别说,它在爬虫里似乎很好用,毕竟是一个哈希存储的数据范例,可以或许在大量数据里直接找到所需要的内容。
   字典的对象使用大括号{}将元素列出。

字典的元素排列并没有一定的顺序,由于可以使用键值来取得该元素。

不允许同一个键值多次出现。创建时如果同一个键值被赋值多次,那么只有最后一 个值有效,前面重复的键值将会被自动删除。

由于字典键值必须不可变,所以可以用数字、字符串或元组充当,列表则不可。如果用列表做键值,将会报错。
1.字典的初始化

   1.直接用 { } 将内容括起来
2.用 dict( ) 函数将列表转换成字典
dic1 = {'cat': 10, 'dog': 20}
print(dic1)
# {'cat': 10, 'dog': 20}
temp_keys = ['cat', 'dog']
temp_values =
dic2 = dict(zip(temp_keys, temp_values))
print(dic2)
# {'cat': 10, 'dog': 20} 2.字典的操作

(1)获取字典中的元素值

通过使用键值作为索引,可以返回字典中的元素。在获取字典中的元素值时,必须包管输入的键值在字典中是存在的,否则 Python 会产生 一个 KeyError 错误。
dic3 = {'cat': 10, 'dog': 20}
print(dic3['cat'])
# 10
print(dic3['rabbit'])
# KeyError: 'rabbit' (2)添加和修改字典中的元素值

   dic = value
当key在字典中存在,就是修改
若不存在,就是添加
dic4 = {'cat': 10, 'dog': 20}
dic4['dog'] = 30
dic4['rabbit'] = 40
print(dic4)
# {'cat': 10, 'dog': 30, 'rabbit': 40} (3)删除字典中的元素

使用 del 语句可以删除字典中的元素。
dic5 = {'cat': 10, 'dog': 20}
del dic5['dog']
print(dic5['dog'])
# KeyError: 'dog'  3.字典内置函数

内置函数包罗 —— 
   len()        str()        type()
这些不怎么常用,用处也和前面的类似,下面简朴看看怎么用。
dic6 = {'cat': 10, 'dog': 20}
print(len(dic6), str(dic6), type(dic6))
# 2 {'cat': 10, 'dog': 20} <class 'dict'> 4.字典内置方法

(1)keys() & values() & items()

这三个方法能过分别获取字典的 键,值,键值对。
dic7 = {'cat': 10, 'dog': 20, 'rabbit': 30}
print(dic7.keys()) #返回值储存在列表中
print(dic7.values())
print(dic7.items())
"""
dict_keys(['cat', 'dog', 'rabbit'])
dict_values()
dict_items([('cat', 10), ('dog', 20), ('rabbit', 30)])
""" (2)get() & update() & setdefault()

   get(k [, d]):k 是字典的索引值,d 是索引值的默认值。如果 k 存在,就返回其值, 否则返回 d。

update(E):E 是字典对象,由字典对象 E 来更新此字典。

setdefault(k [, d]):k 是字典的键值,d 是键值的默认值。如果 k 存在,就返回其值; 否则返回 d,并将新的元素添加到字典中。
dic7 = {'cat': 10, 'dog': 20, 'rabbit': 30}
print(dic7.keys()) #返回值储存在列表中
print(dic7.values())
print(dic7.items())
"""
dict_keys(['cat', 'dog', 'rabbit'])
dict_values()
dict_items([('cat', 10), ('dog', 20), ('rabbit', 30)])
"""dic8 = {'cat': 10, 'dog': 20, 'rabbit': 30}print(dic8.get('cat'))print(dic8.get('cow', 'haha')) #当get的内容不存在时,不会报错"""10haha"""dic8.update({'dog' : 50})print(dic8)# {'cat': 10, 'dog': 50, 'rabbit': 30}print(dic8.setdefault('cat'))print(dic8.setdefault('cow', 100))"""10100""" (3)copy() & clear()

dic9 = {'cat': 10, 'dog': 20, 'rabbit': 30}
dic10 = dic9.copy()
print(dic10)
# {'cat': 10, 'dog': 20, 'rabbit': 30}
print("---------------------------------------")

dic10.clear()
print(dic10)
# {} (4)pop() 

   popitem():删除字典中的最后一个元素。
pop(k):删除键为k的这个键值对
dic11 = {'cat': 10, 'dog': 20, 'rabbit': 30}
dic11.pop('cat')
dic11.popitem()
print(dic11)
# {'dog': 20} https://i-blog.csdnimg.cn/direct/4a5187bd11064dcfa71c2a705b151437.webp
八、元组

这个范例说实话很少用,这边就简朴带过一下。
首先对于元组这个范例,它是一个不可变对象,它的这个性质导致它很少会用到,可能在某些特别时候,你包管一些数据就是不会被修改的时候才会用到它吧。
1. 创建只有一个元素的元组

如果创建的元组对象只有一个元素,就必须在元素之后加上逗号(,),否则 Python 会认 为此元素是要设置给变量的值。
tup1 = (10,)
print(tup1, type(tup1))
#(10,) <class 'tuple'>
tup2 = (10)
print(tup2, type(tup2))
#10 <class 'int'> 2. 元组的对象值不能修改

在元组中,不可以修改元组对象内的元素值,否则会提示错误。这个决定了元组整体的一个性质。
tup3 = (10, 20, 30)
tup3 = 100
#TypeError: 'tuple' object does not support item assignment
3. 删除元组内的对象

虽然元组内的元素值不能修改,但是可以删除,从而到达更新元组对象的效果。 
tup4 = (100, 200, 300, 400)
tup4 = tup4, tup4, tup4
print(tup4)
#(100, 300, 400) 4. 获取元组对象的元素值

元组对象支持使用索引值的方式来返回元素值。
tup5 = (10, 20, 30, 40, 50)
print(tup5, tup5)
# 20 40 5. 组合元组

虽然元组的元素值不能修改,但是可以组合。
tup6 = (10, 20)
tup7 = ('black', 'bunny', 'girl')
print(tup6 + tup7)
# (10, 20, 'black', 'bunny', 'girl') 6. 删除整个元组

使用 del 语句可以删除整个元组。
tup8 = (10, 20)
del tup8
print(tup8)
# NameError: name 'tup8' is not defined. 7.内置函数

元组也能使用的函数有 —— len(), max(), min(), sum()。这些在前面都遇见过,效果和使用方法都差不多,我们就简朴看看怎么用。
tup9 = (10, 20, 30, 40)
print(max(tup9), min(tup9), len(tup9), sum(tup9))
# 40 10 4 100 https://i-blog.csdnimg.cn/direct/bbe0c80277df43538cc6d7e0ebcbd85e.png
九、聚集

这个也不常使用,也简朴了解一下吧。
聚集是由无序且不重复的元素组成的可变序列。可以使用花括号{}或者set()函数来创建聚集。
1.聚集的初始化

set1 = set()
set2 = {1, 2, 3, 4, 5, 6, 7}
print(type(set1))# <class 'set'>
print(type(set2))# <class 'set'> 2.聚集的操作

(1)添加操作

使用add方法。
set3 = {1, 2, 3}
set3.add(4)
print(set3)
# {1, 2, 3, 4} (2)删除操作

使用 remove() 和 discard() ,其中当集会合不存在指定删除元素时,remove会引起KeyError,而discard不会。
set4 = {1, 2, 3, 4}
set4.remove(3)
print(set4)
# {1, 2, 4}
#set4.remove(5) 会报错
#KeyError: 5
set4.discard(5)
# 元素5不存在,不会报错
print(set4)
# 输出 {1, 2, 4} (3)并集 & 交集 & 差集

   并集 : 使用union()方法或者|运算符可以获取两个聚集的并集
交集 :使用intersection()方法或者&运算符可以获取两个聚集的交集
差集 :使用difference()方法或者-运算符可以获取两个聚集的差集
set1 = {1, 2, 3}
set2 = {3, 4, 5}
u_set1 = set1.union(set2)
print(u_set1)# 输出 {1, 2, 3, 4, 5}

# 或者使用 | 运算符
u_set2 = set1 | set2
print(u_set2)# 输出 {1, 2, 3, 4, 5}

i_set1 = set1.intersection(set2)
print(i_set1)# 输出 {3}

# 或者使用 & 运算符
i_set2 = set1 & set2
print(i_set2)# 输出 {3}

d_set1 = set1.difference(set2)
print(d_set1)# 输出 {1, 2}

# 或者使用 - 运算符
d_set2 = set1 - set2
print(d_set2)# 输出 {1, 2} 十、txt文本操作

这部分我们在后续爬虫爬取内容的时候,会很常使用到,但是不用担心学不会,用多了就能记住,在本篇里面不要求把握的很好。
如果希望爬虫趴下来的内容仍然可以或许生存, 需要使用其他的生存方式,文件就是一个很好的选择。在程序运行过程中将数据生存到文件中, 程序运行结束后,相干数据就生存在文件中了。
   1.open
2.with

w  只写
r  只读
a  只写追加
+  可读可写
#简单方式
file=open('test.txt','a+',encoding='utf8')
for i,line in enumerate(file.readlines()):
    print(i,line.strip())
file.close()

#自开合
with open('test.txt', 'w', encoding='utf8') as f:
    f.write("这是自开合里边写的")
 我们对于文本操作的了解就先到这里,到背面遇到无法办理的就到时候再说。
https://i-blog.csdnimg.cn/direct/f714f3c7e6ef4432a358c2831309bfcb.gif
 很多多少很多多少,要死掉了啦
 总结

本篇内容很多吧,信赖开头小白兔说的,这篇 很多很难写 的话吧,大家徐徐学徐徐看,也可以给小白兔一些时间预备下一篇的内容,对于这个专栏的内容可能更新速率会比较慢,小白兔想要好好写爬虫这个专栏,想要让它成为我的一个得意之作。
在这里,我把本期里所写的代码以及pycharm的下载等内容的下载链接都放在下方 
下载链接

pycharm

链接:https://pan.quark.cn/s/a96a9f69de06
提取码:pyhp
示例代码

链接:https://pan.quark.cn/s/84de7213246c
提取码:kbDA
https://i-blog.csdnimg.cn/direct/4e0d518ac4f8412281c1f5daa93c478e.pnghttps://i-blog.csdnimg.cn/direct/29037349c03941e4b81b62d5d74789d9.png
OK,那么大家下回见,如果感兴趣stm32的内容或者算法的内容,大家也可以看看小白兔其他的一些专栏。
https://i-blog.csdnimg.cn/direct/88dfa76166b74beaba140967b2c1b0d7.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Python爬虫学习前传 —— Python从安装到学会一站式服务