python知识-模块了解
re模块
# 在python中如果想要使用正则表达式 re模块是选择之一
import re
# res = re.findall('a','jason oscar aaa')
# print(res) # ['a', 'a', 'a', 'a', 'a'] 列表
"""
findall通过正则表达式筛选出文本中所有符合条件的数据
"""
# res = re.finditer('a','jason oscar aaa')
# print(res) # <callable_iterator object at 0x000001B46D8B5B50>
"""
finditer与findall作用一致 区别是结果会被处理成迭代器对象 用于节省内存
"""
# res = re.search('a','jason oscar aaa')
# print(res) # <re.Match object; span=(1, 2), match='a'>
# print(res.group()) # a
"""
search通过正则表达式匹配到一个不符合条件的内容就结束
"""
# res = re.match('a','jason oscar aaa')
# print(res) # None
"""
match通过正则表达式从头开始匹配 如果头部已经不符合 那么后面就不走了
"""
# obj = re.compile('a')
# print(re.findall(obj,'a123bcdef1')) ['a']
# print(re.findall(obj,'asdd23a21')) ['a', 'a']
# print(re.findall(obj,'sdsa212aa13ds')) ['a', 'a', 'a']
"""
compile能够提前准备好正则 之后可以反复使用 减少代码重复
"""
re模块补充说明
分组
res =re.findall('abc','abcabcabcabc')
print(res) # ['abc', 'abc', 'abc', 'abc']
"""
findall针对分组的正则表达式匹配到的结果 优先展示
"""
res = re.findall('a(b)c','abcabcabcabc')
print(res) # ['b', 'b', 'b', 'b']
res = re.findall('a(?:b)c','abcabcabcabc')
print(res) # ['abc', 'abc', 'abc', 'abc']
"""
findall也能够取消分组优先展示(?:)
"""
res = re.search('a(b)c','abcabcabcabc')
print(res.group()) # abc
print(res.group(0)) # abc
print(res.group(1)) # b
别名
res = re.search('a(?P<id>b)(?P<name>c)','abcabcabcabc')
print(res.group())
print(res.group(1))
print(res.group('id'))
print(res.group('name'))
网络爬虫简介
1.什么是互联网
将全世界的计算机连接到一起组成的网络
2.互联网发明的目的是什么
将接入互联网的计算机上面的数据彼此分享
3.上网的本质是什么
基于互联网访问别人计算机上面的资源(有些计算机存在的意义就是让别人访问 这种类型的计算机也称为服务器)
4.网络爬虫的本质
模拟计算机浏览器朝目标网址发送请求回去数据并筛选 只要是浏览器可以访问到的数据网络爬虫理论上都可以
5.获取红牛分公司数据
http://www.redbull.com.cn/about/branch
第三方模块的下载
1.第三方模块必须先下载才可以导入使用
2.python下载第三方模块需要借助于pip工具
3.下载命令
pip3.8 install 模块名
"""
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
"""
爬取公司信息
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)
读取页面数据
with open(r'hn.hml','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)
openpyx模块
主要用于操作Excel表格 也是pandas底层操作表格的模块
在python中能够操作Excel表格的模块有很多
openpyx1属于近几年比较流行的模块 他针对03版本之前的Excel文件兼容性不好
xlwt、xlrd也可以操作Excel表格
兼容所有版本的Excel文件 但是使用方式没有openpyx1简单
1.Excel版本问题
03版本之前 Excel文件的后缀名 .xls
03版本之后 Excel文件的后缀名 .xlsx
2.下载模块
pip3.8 install openpyx1
openpyxl实操
创建Excel文件
from openpyxl import Workbook
wb = Workbook()
wb1 = wb.create_sheet('表1')
wb2 = wb.create_sheet('表2')
wb3 = wb.create_sheet('表3', 2)
wb1.title = '课程表'
wb1.sheet_properties.tabcolor = "1072BA"
wb.save(r'123.xlsx')
写入数据
# 第一种写入方式
wb1['A2'] = '斯蒂芬库里'
wb2['D2'] = '勒布朗詹姆斯'
# 第二种写入方式
wb1.cell(row=3,column=2,value='安德烈伊戈达拉')
# 第三种写入方式(批量写入)
wb1.append(['username','password','age','gender','hobby'])
wb1.append(['curry',123,18,',male','basketball'])
wb1.append(['curry1',123,18,',male','basketball'])
wb1.append(['curry2',123,18,',male','basketball'])
wb1.append(['curry3',123,18,',male','basketball'])
wb1.append(['curry4',123,18,',male',None])
wb1.append([None,123,18,',male','basketball'])
wb1['F14'] = '=sum(B5:B10)'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)