从零开始学爬虫1——python基础

简介: python基础

本文为学习笔记,原教程:https://www.bilibili.com/video/BV1Db4y1m7Ho/?spm_id_from=333.999.0.0&vd_source=4cfa97d709226c94ec1c02fc78b760ec

1 数据类型

1.1 基本定义

  1. Number

    int float

    python3中没有long/double

  2. Boolean
  3. List

    a = [16, 17, 18]
  4. Tuple

    a = (16, 17, 18)
  5. Dict

    经常在scrapy框架中使用

    a = {'key1' : 'value1', 'key2' : 'value2'}

1.2 查看变量数据类型

type(a)

1.3 数据类型转换

int(a) # 包含数字以外的字符时会转换失败
float(a)
str(a)
bool(a)

2 运算符

a = 9.0
b = 2.0
c = a // b # c = 4 取商的整数部分

字符串的乘法是重复字符串

# python赋值运算符的特殊性-多个变量赋值
a, b, c = 1, 2, 3
# 逻辑运算符
and or not

# 逻辑运算符的性能优化
# and: 如果前面有条件不为真,那么后面的条件不再进行判断
if (a>10) and (b>10) and (c>10)
    do
# or: 只要前面有一个条件为真,就不再判断后面的条件
if (a>10) or (b>10) or (c>10)
    do

3 输入输出

# 格式化输出
a = '5.12'
print('this is {}, and that is {}'.format(a, a))

# 接收输入
# 其中,默认输入为字符串类型,使用时按需转换数据类型
a = input('enter sth')

4 流程控制语句

# for循环
#     TEMPLATE
#     for i in a:
#        do sth
# a可以是以下几种:
1. a是字符串: 遍历的是字符
2. a是range(5): 从0到4遍历
3. a是range(1,6): 左闭右开, 从1遍历到5
4. a是range(1,10,3): 遍历1,4,7
5. a是一个列表: 遍历list中的元素或者元素的下标

5 数据类型高级用法

5.1 字符串

功能 关键字 解释
获取长度 len 获取字符串的长度
查找内容 find 查找指定内容是否在字符串中存在,如果存在,返回指定内容第一次出现的索引值;否则,返回-1
判断 startswith、endswith 判断字符串是否以'XXX'开头/结尾
计算出现次数 count 返回str在在字符串中出现的次数
替换 replace 替换字符串中指定的内容
切割 split 以指定参数切割字符串,返回列表,列表元素为字符串
修改大小写 upper/lower 修改字符串中的大小写
去空格 strip 去掉字符串中的空格
字符串拼接 join 一个按字符的字符串拼接

5.2 列表

列表的增删改查

添加元素

# append: 追加, 在列表的最后添加一个对象/元素
# insert: 插入, index的值就是想要插入的数据的下标
# extend: 继承, 将另一个列表中元素逐一添加到列表中

查找元素

# in: 判断元素是否在列表中, 如果在,返回true
# not in: 与in相反

修改元素

# 可以通过元素的下标直接修改元素

删除元素

# del: 根据下标删除列表中的元素
# pop: 删除列表中的最后一个元素
# remove: 删除指定的值删除元素

5.3 元组

python的元组和列表类似,不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号

定义只有一个元素的元组,需要在唯一的元素后写一个逗号

5.4 切片

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

# 语法: a[start, end] 左闭右开区间
a[0:4]        # 左闭右开区间
a[1:]        # 从起始值开始,一直到末尾
a[:4]        # 从头开始,一直到第二个参数索引之前的元素
a[0:6:2]    # 步长为2, 分别输出以下索引的元素: 0,2,4

5.5 字典

查询元素

a = {'key1':'value1', 'key2':'value2'}
# 使用[]的方式获取对应key的value
a['key1']

# 使用get方法
a.get('key1')

# 对比: 在于访问不存在的key, 第一种方法会报错, 第二种方法会返回None

修改元素

# 只能用[]的方式修改字典中的元素
a['key1'] = 'value3'

添加元素

# 直接[]出不存在的key即可
a['key3'] = 'value3'

删除元素

# del
#     1.删除字典中指定元素
del a['key1']
#     2.删除整个字典
del a
# clear
#     3.清空字典, 但是保留字典对象
a.clear()

遍历字典

# 1.遍历字典的key
for key in a.keys():
    do sth
# 2.遍历字典的value
for key in a.values():
    do sth
# 3.遍历字典的key和value
for key, value in a.items():
    do sth
# 4.遍历字典的项/元素
for item in a.items(): # items()返回的是元组
    do sth

6 文件

6.1 文件的打开与关闭

打开文件过后一定要记得关闭文件,否则耗内存

# 创建/打开文件
fp = open(文件路径, 打开模式) # open函数没法创建文件夹

# 关闭文件
fp.close()

文件打开模式:

访问模式 说明
r 以只读方式打开文件。文件的指针将会放在文件的开头。如果文件不存在,则报错。这是默认模式。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab+ 以二进制格式打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

6.2 文件的读写

# 写文件
fp.write('txt' * 5)

# 读文件
# 默认情况下,read是一字节一字节读, 效率比较低
content = fp.read()
# readline是一行一行读 但是只能读取一行
content = fp.readline()
# readlines可以按照行来读取 但是会将所有数据都读到一个list中 list中的元素一行一行的数据
content = fp.readlines()

6.3 文件的序列化与反序列化

通过文件操作,我们可以将字符串写入到一个本地文件。但是,如果是一个对象(例如列表、字典、元组等),就无法直接写入到一个文件里,需要对这个对象进行序列化,然后才能写入到文件里。

设计一套协议,按照某种规则,把内存中的数据转换为字节序列,保存到文件,这就是序列化,反之,从文件的字节序列恢复到内存中,就是反序列化。

Python中提供了JSON这个模块用来实现数据的序列化和反序列化。

  • JSON(JavaScriptObjectNotation, JS对象简谱)是一种轻量级的数据交换标准。JSON的本质是字符串。
a_list = ['a1', 'a2']

# 导入json模块到文件中
import json

# 序列化
# 将python对象变成json字符串
a = json.dumps(a_list)
a.write(fp) # a = "['a1', 'a2']"
# 将python对象变成json字符串并保存到文件中
json.dump(a_list, fp)

# 反序列化
# 将json字符串变成python对象
content = fp.read()
result = json.loads(content)
# 不用读文件 将json字符串变成python对象
result = json.load(fp)

7 异常

程序在运行过程中,由于我们的编码不规范,或者其他原因一些客观原因,导致我们的程序无法继续运行,此时,程序就会出现异常。如果我们不对异常进行处理,程序可能会由于异常直接中断掉。为了保证程序的健壮性,我们在程序设计里提出了异常处理这个概念。

# 异常的格式
# try: 
#     可能出现异常的代码
# except 异常的类型:
#     友好的提示
try:
    f = open('test.txt', 'r')
    print(f.read())
except FileNotFoundError:
    print('没找到文件')
目录
相关文章
|
1月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
2月前
|
数据采集 Web App开发 自然语言处理
新闻热点一目了然:Python爬虫数据可视化
新闻热点一目了然:Python爬虫数据可视化
|
3月前
|
数据采集 数据挖掘 测试技术
Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
314 0
|
1月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
2月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
666 19
|
1月前
|
数据采集 存储 JSON
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
Python爬虫常见陷阱:Ajax动态生成内容的URL去重与数据拼接
|
1月前
|
数据采集 存储 JavaScript
解析Python爬虫中的Cookies和Session管理
Cookies与Session是Python爬虫中实现状态保持的核心。Cookies由服务器发送、客户端存储,用于标识用户;Session则通过唯一ID在服务端记录会话信息。二者协同实现登录模拟与数据持久化。
|
2月前
|
数据采集 存储 Web App开发
处理Cookie和Session:让Python爬虫保持连贯的"身份"
处理Cookie和Session:让Python爬虫保持连贯的"身份"
|
2月前
|
数据采集 Web App开发 前端开发
处理动态Token:Python爬虫应对AJAX授权请求的策略
处理动态Token:Python爬虫应对AJAX授权请求的策略
|
2月前
|
数据采集 网络协议 API
协程+连接池:高并发Python爬虫的底层优化逻辑
协程+连接池:高并发Python爬虫的底层优化逻辑

推荐镜像

更多