python学习笔记
今日内容概要
- re模块
- 第三方模块下载
- 网络爬虫实战
- openpyxl模块
今日内容详细
re模块
- 在python中如果想要使用正则表达式 re模块是选择之一
方法 | 作用 |
---|---|
findall | 通过正则表达式筛选出文本中所有符合条件的数据 |
finditer | 与findall作用一致,只不过结果会被处理成迭代器对象,用于节省内存 |
search | 通过正则表达式匹配到一个符合条件的内容就结束 |
match | 通过正则表达式从头开始匹配,如果开头就不符合,后面就不走了 |
compile | 能够提前准备好正则,之后可以反复使用减少代码冗余 |
下面了解即可 | |
fullmatch | 要求目标文本要完全匹配规则,否则返回None |
sub | 将与规则匹配的字符串替换为其他文本 |
split | 从与规则匹配的字符串进行切割,返回切割后字符串组成的列表 |
groups | 用于查看指定分组匹配到的内容 |
import re
1.findall
res = re.findall('a', 'jason oscar aaa')
print(res) # ['a', 'a', 'a', 'a', 'a'] 列表
2.finditer
res = re.finditer('a', 'jason oscar aaa')
print(res) # <callable_iterator object at 0x000002514D4F5C70>
3.search
res = re.search('a', 'jason oscar aaa')
print(res) # <re.Match object; span=(1, 2), match='a'>
print(res.group()) # a
4.match
res = re.match('a', 'jason oscar aaa')
print(res) # None
5.compile
obj = re.compile('a')
print(re.findall(obj,'asjd21hj13123j'))
print(re.findall(obj,'fdh3jh45jhqjha'))
print(re.findall(obj,'asdasdadadasda'))
- 补充知识
1.分组
():分组字符,可以为匹配到的内容分组,快速获取到分组中的数据
import re
res = re.findall('abc','abcabcabcabc')
print(res) # ['abc', 'abc', 'abc', 'abc']
res = re.findall('a(b)c','abcabcabcabc')
"""
findall针对分组的正则表达式匹配到的结果 优先展示
"""
print(res) # ['b', 'b', 'b', 'b']
res = re.findall('a(?:b)c','abcabcabcabc')
"""
findall也能够取消分组优先展示 (?:)
"""
print(res) # ['abc', 'abc', 'abc', 'abc']
res = re.search('a(b)c','abcabcabcabc')
print(res.group()) # abc
print(res.group(0)) # abc
print(res.group(1)) # b
2.别名
import re
res = re.search('a(?P<id>b)(?P<name>c)','abcabcabcabc')
print(res.group()) # abc
print(res.group(1)) # b
print(res.group('id')) # b
print(res.group('name')) # c
第三方模块下载
1.第三方模块必须先下载才可以导入使用
2.python下载第三方模块需要借助于pip工具
3.下载命令
pip3.8 install 模块名
- cmd命令下载第三方模块
- pycharm程序下载第三方模块
1.下载速度很慢
pip工具默认是从国外的仓库地址下载模块 速度很慢
我们可以切换下载的地址(源地址)
清华大学 :https://pypi.tuna.tsinghua.edu.cn/simple/
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科学技术大学 :http://pypi.mirrors.ustc.edu.cn/simple/
华中科技大学:http://pypi.hustunique.com/
豆瓣源:http://pypi.douban.com/simple/
腾讯源:http://mirrors.cloud.tencent.com/pypi/simple
华为镜像源:https://repo.huaweicloud.com/repository/pypi/simple/
pip3.8 install 模块名 -i 源地址
pycharm提供第三方模块下载快捷方式
也可以直接修改python解释器源文件(课下自行查阅)
2.下载报错
1.pip工具版本过低 直接拷贝提示信息里面的更新命令即可
python38 -m pip install --upgrade pip
2.网络波动 关键字是Read timed out
只需要重新下载几次即可 或者切换一个网络稳定一点的
3.有些模块在下载使用之前需要提前配置指定的环境
结合具体情况 百度搜索
3.模块也有版本
pip3.8 install 模块名==版本号
pip3.8 install django==1.11.11
网络爬虫实战
- 1.什么是互联网
将全世界的计算机连接到一起组成的网络
- 2.互联网发明的目的是什么
将接入互联网的计算机上面的数据彼此共享
- 3.上网的本质是什么
基于互联网访问别人计算机上面的资源(有些计算机存在的意义就是让别人访
问,这种类型的计算机我们也称之为服务器)
- 4.网络爬虫的本质
模拟计算机浏览器朝目标网址发送请求回去数据并筛选
只要是浏览器可以访问到的数据网络爬虫理论上都可以
5.获取红牛分公司数据
http://www.redbull.com.cn/about/branch
- 5.爬取公司信息
import requests
# 朝目标地址发送网络请求获取响应数据(相当于在浏览器地址栏中输入网址并回车)
res = requests.get('http://www.redbull.com.cn/about/branch')
print(res.content) # 获取bytes类型的数据
print(res.text) # 获取解码之后的数据
# 为了避免每次执行程序都要发送网络请求 也可以提前保存页面数据到文件
with open(r'hn.html', 'wb') as f:
f.write(res.content)
import re
# 读取页面数据
with open(r'hn.html', 'r', encoding='utf8') as f:
data = f.read()
# 研究目标数据的特征 编写正则筛选
# 1.获取所有的分公司名称
company_name_list = re.findall('<h2>(.*?)</h2>', data)
# print(res)
# 2.获取所有的分公司地址
company_addr_list = re.findall("<p class='mapIco'>(.*?)</p>", data)
# print(company_addr_list)
# 3.获取所有的分公司邮箱
company_email_list = re.findall("<p class='mailIco'>(.*?)</p>", data)
# print(company_email_list)
# 4.获取所有的分公司电话
company_phone_list = re.findall("<p class='telIco'>(.*?)</p>", data)
# print(company_phone_list)
# 5.将上述四个列表中的数据按照位置整合
res = zip(company_name_list, company_addr_list, company_email_list, company_phone_list)
# 6.处理数据(展示 保存 excel)
for i in res: # ('红牛杭州分公司', '杭州市上城区庆春路29号远洋大厦11楼A座', '310009', '0571-87045279/7792')
print("""
公司名称:%s
公司地址:%s
公司邮箱:%s
公司电话:%s
""" % i)
openpyxl模块
- openpyxl模块: 主要用于操作excel表格,也是pandas底层操作表格的模块
在python中能够操作excel表格的模块有很多,openpyxl属于近几年比较流行的模块,openpyxl针对03版本之前的excel文件兼容性不好,xlwt、xlrd也可以操作excel表格,兼容所有版本的excel文件,但是使用方式没有openpyxl简单
1.excel版本问题
03版本之前 excel文件的后缀名 .xls
03版本之后 excel文件的后缀名 .xlsx
如果是苹果电脑excel文件的后缀 .csv
2.下载模块
pip3.8 install openpyxl
- 实操
1.打开文件
创建
from openpyxl import Workbook
# 实例化
wb = Workbook()
# 激活 worksheet
ws = wb.active
打开已有
from openpyxl import load_workbook
wb2 = load_workbook('文件名称.xlsx')
2.存储数据
方式一:数据可以直接分配到单元格中(可以输入公式)
ws['A1'] = 42
方式二:可以附加行,从第一列开始附加(从最下方空白处,最左开始)(可以输入多行)
ws.append([1, 2, 3])
方式三:Python 类型会被自动转换
ws['A3'] = datetime.datetime.now().strftime("%Y-%m-%d")
3.创建工作表
方式一:插入到最后(default)
ws1 = wb.create_sheet("Mysheet")
方式二:插入到最开始的位置
ws2 = wb.create_sheet("Mysheet", 0)
4.修改工作表的名称
ws.title = '舔狗表' # 支持二次修改
5.查看表名
显示所有表名
print(wb.sheetnames)
['Sheet2', 'New Title', 'Sheet1']
遍历所有表
for sheet in wb:
print(sheet.title)
6.写入数据
方法一
c = ws['A4']
方法二:row 行;column 列
d = ws.cell(row=4, column=2, value=10)
方法三:只要访问就创建
for i in range(1,101):
for j in range(1,101):
ws.cell(row=i, column=j)
方法四:批量写入
ws.append(['username','password','age','gender','hobby'])
ws.append(['jason1',123,18,'male','read'])
ws.append(['jason2',123,18,'male','read'])
ws.append(['jason3',123,18,'male','read'])
ws.append(['jason4',123,18,'male','read'])
ws.append(['jason4',123,18,'male',None])
ws.append([None,123,18,'male',''])
7.保存数据
wb.save('文件名称.xlsx')
8.其他
计算B5到B10之间的和写在F11的位置
ws['F11'] = '=sum(B5:B10)'
改变 sheet 标签按钮颜色
ws.sheet_properties.tabColor = "1072BA"
获取最大行,最大列
print(sheet.max_row)
print(sheet.max_column)
删除工作表
方式一
wb.remove(sheet)
方式二
del wb[sheet]
- 作业
import requests
# 朝目标地址发送网络请求获取响应数据(相当于在浏览器地址栏中输入网址并回车)
res = requests.get('http://www.redbull.com.cn/about/branch')
print(res.content) # 获取bytes类型的数据
print(res.text) # 获取解码之后的数据
# 为了避免每次执行程序都要发送网络请求 也可以提前保存页面数据到文件
with open(r'hn.html', 'wb') as f:
f.write(res.content)
import re
from openpyxl import Workbook
# 读取页面数据
with open(r'hn.html', 'r', encoding='utf8') as f:
data = f.read()
# 研究目标数据的特征 编写正则筛选
# 1.获取所有的分公司名称
company_name_list = re.findall('<h2>(.*?)</h2>', data)
# 2.获取所有的分公司地址
company_addr_list = re.findall("<p class='mapIco'>(.*?)</p>", data)
# 3.获取所有的分公司邮箱
company_email_list = re.findall("<p class='mailIco'>(.*?)</p>", data)
# 4.获取所有的分公司电话
company_phone_list = re.findall("<p class='telIco'>(.*?)</p>", data)
# 5.将上述四个列表中的数据按照位置整合
res = zip(company_name_list, company_addr_list, company_email_list, company_phone_list)
# 6.处理数据(展示 保存 excel)
# ('红牛杭州分公司', '杭州市上城区庆春路29号远洋大厦11楼A座', '310009', '0571-87045279/7792')
wb = Workbook()
wb1 = wb.create_sheet('红牛分公司表', 0)
wb1.append(['公司名称', '公司地址', '公司邮箱', '公司电话'])
for i in res: # ('红牛杭州分公司', '杭州市上城区庆春路29号远洋大厦11楼A座', '310009', '0571-87045279/7792')
wb1.append([i[0], i[1], i[2], i[3]])
wb.save(r'红牛分公司表.xlsx')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了