从零开始学爬虫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月前
|
数据采集 存储 XML
Python爬虫:深入探索1688关键词接口获取之道
在数字化经济中,数据尤其在电商领域的价值日益凸显。1688作为中国领先的B2B平台,其关键词接口对商家至关重要。本文介绍如何通过Python爬虫技术,合法合规地获取1688关键词接口,助力商家洞察市场趋势,优化营销策略。
|
2月前
|
数据采集 Web App开发 监控
高效爬取B站评论:Python爬虫的最佳实践
高效爬取B站评论:Python爬虫的最佳实践
|
2月前
|
数据采集 缓存 定位技术
网络延迟对Python爬虫速度的影响分析
网络延迟对Python爬虫速度的影响分析
|
12天前
|
数据采集 供应链 API
Python爬虫与1688图片搜索API接口:深度解析与显著收益
在电子商务领域,数据是驱动业务决策的核心。阿里巴巴旗下的1688平台作为全球领先的B2B市场,提供了丰富的API接口,特别是图片搜索API(`item_search_img`),允许开发者通过上传图片搜索相似商品。本文介绍如何结合Python爬虫技术高效利用该接口,提升搜索效率和用户体验,助力企业实现自动化商品搜索、库存管理优化、竞品监控与定价策略调整等,显著提高运营效率和市场竞争力。
44 3
|
23天前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
24天前
|
数据采集 Web App开发 监控
Python爬虫:爱奇艺榜单数据的实时监控
Python爬虫:爱奇艺榜单数据的实时监控
|
1月前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
1月前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
1月前
|
数据采集 JSON 开发者
Python爬虫京东商品详情数据接口
京东商品详情数据接口(JD.item_get)提供商品标题、价格、品牌、规格、图片等详细信息,适用于电商数据分析、竞品分析等。开发者需先注册账号、创建应用并申请接口权限,使用时需遵循相关规则,注意数据更新频率和错误处理。示例代码展示了如何通过 Python 调用此接口并处理返回的 JSON 数据。
|
2月前
|
XML 数据采集 数据格式
Python 爬虫必备杀器,xpath 解析 HTML
【11月更文挑战第17天】XPath 是一种用于在 XML 和 HTML 文档中定位节点的语言,通过路径表达式选取节点或节点集。它不仅适用于 XML,也广泛应用于 HTML 解析。基本语法包括标签名、属性、层级关系等的选择,如 `//p` 选择所有段落标签,`//a[@href='example.com']` 选择特定链接。在 Python 中,常用 lxml 库结合 XPath 进行网页数据抓取,支持高效解析与复杂信息提取。高级技巧涵盖轴的使用和函数应用,如 `contains()` 用于模糊匹配。