Day28 第三方模块
文章目录
1、re 模块
python 解释器中如果想要使用正则表达式 re模块是选择之一
re.findall
findall 通过正则表达式筛选出文本中所有符合条件的数据
import re
res = re.findall('a','jason oscar aaa')
print(res)
>>>>>>>>>>>>>>>
['a', 'a', 'a', 'a', 'a']
re.finditer
finditer与 findall作用一致 只不过结果会被处理成迭代器对象 用于节省空间
import re
res=re.finditer('a','jason oscar aaa')
print(res)
>>>>>>>>>>>>>>>>>>>>>>>>>>
<callable_iterator object at 0x000002514D4F5C70>
re.search
search 通过正则表达式匹配到一个符合条件的内容就结束
import re
res=re.search('a','jason oscar aaa')
print(res)
print(res.group())
>>>>>>>>>>>>>>>>>>>>>>>>>
<re.Match object; span=(1, 2), match='a'>
a
re.match
match 通过 正则表达式 从头开始匹配 如果头已经不符合 那么就直接结束
import re
res=re.match('a','jason oscar aaa')
print(res)
None
re.compile
compile 能够提前准备好 正则 之后可以反复使用 减少代码冗余
import re
obj=re.compile('a')
print(re.findall(obj,'ahfjklhala'))
>>>>>>>>>>>>>>>>>>>>>>>>>>
['a', 'a', 'a']
1.1、re模块补充说明
分组
findall
针对分组的正则表达式匹配到的结果 优先展示
import re
res= re.findall('abc','abcabcabcabc')
print(res)
res=re.findall('a(b)c','abcabcabcabc')
print(res)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
['abc', 'abc', 'abc', 'abc']
['b', 'b', 'b', 'b']
取消分组的优先展示
import re
res=re.findall('a(?:b)c','abcabcabc')
print(res)
>>>>>>>>>>>>>>>>>>>>>
['abc', 'abc', 'abc']
别名
import re
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'))
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
abc
b
b
c
2、网络爬虫简介
什么是互联网
将是全世界的计算机接到一起组成的网络
互联网发明的目的是什么
将接入互联网的计算机上面的数据彼此共享
上网的本质是什么
基于互联网访问别人计算机 上面的资源(有些计算机存在的意义就是让别人访问,这种类型的计算机我们也称之位服务器)
网络爬虫的本质
模拟计算机游览器朝目标网址发送请求回去数据并筛选,只要是游览器可以访问到的数据网络爬虫理论上都可以
2.1、第三方模块的下载
第三方模块必须先下载才可以导入使用
python下载第三方模块需要借助于pip工具
解释器 终端下载命令
pip3.8 install 模块名
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解释器源文件
下载报错
- pip 工具版本过低 直接拷贝提示信息里面的更新命令即可
python38 -m pip install --upgrade pip
- 网络波动 关键字 是read tinme out
只需要重新下载几次即可 或者切换一个网络稳定一点的 - 有些模块在下载使用之前需要提前配置指定的环境
模块也有版本
格式:pip3.7 install 模块名==版本号
使用:pip3.7 install django==1.11.11
2.2、爬虫实战
import requests
import requests
res=requests.get('http://www.redbull.com.cn/about/branch')
# res.content 转成bytes 类型数据
print(res.text) #转成 解码之后的数据
with open(r'hn.html','wb')as hn_w:
hn_w.write(res.content) # 存为 hn.html文件
import re
import re
with open(r'hn.html','r',encoding='utf')as hn_r:
hn_info=hn_r.read()
# print(hn_info)
#通过 正则表达式 取文本中对应值
com_name=re.findall('><h2>(.*?)</h2>',hn_info)
com_addr=re.findall("<p class='mapIco'>(.*?)</p>",hn_info)
com_email=re.findall("<p class='mailIco'>(.*?)</p>",hn_info)
com_phone=re.findall("<p class='telIco'>(.*?)</p></li>",hn_info)
#利用拉链 将每个公司的各 信息组成元组 再组合为迭代器
hn_list=zip(com_name,com_addr,com_email,com_phone)
# 循环 取出 格式化打印
for i in hn_list:
print()
print(f'公司名称:{i[0]}\n公司地址:{i[1]}\n公司邮编:{i[2]}\n公司联系电话:{i[3]}')
3、openpysl 模块
主要用于操作excel表格 也是pandas底层操作表格的模块
在python中能够操作excel表格的模块有很多,openpys属于近几年比较流行的模块(openpyxl针对03版本之前的excel文件兼容性不好)
xlwt、xlrd也可以操作excel表格,兼容所有版本的excel文件 但是使用方法没有openpyxl简单
excel版本问题
03版本之前 excel文件的后缀名 .xls
03版本之后 excel文件的后缀名.xlsx
如果是苹果电脑excel文件的后缀.csv
下载模块
pip3.7 install openpyx1
3.1、openpyxl 实战
创建excel文件,创建表格
from openpyxl import Workbook
wb=Workbook()
wb1=wb.create_sheet('红牛公司信息') # 创建excel里表格
wb1.title='红牛分公司信息' # 支持二次修改
wb.save(r'hn.xlsx') # 保存文件
添加内容
通过 列 行 编号添加
from openpyxl import Workbook
wb=Workbook()
wb1=wb.create_sheet('红牛公司信息') # 创建excel里表格
wb1.title='红牛分公司信息'
wb1['A1']='红牛公司名' # 在列表A1中添加文本红牛公司
wb1['B1']='红牛公司地址' #在列表B1 处添加 文本 红牛公司地址
wb1['C1']='公司电话'
wb1['D1']='邮箱'
wb.save(r'hn.xlsx') # 保存文件
通过列表批量添加
from openpyxl import Workbook
wb=Workbook()
wb1=wb.create_sheet('红牛公司信息') # 创建列表
wb1.title='红牛分公司信息' # 支持二次修改
wb1['A1']='红牛公司名' # 在列表A1中添加文本红牛公司
wb1['B1']='红牛公司地址' #在列表B1 处添加 文本 红牛公司地址
wb1['C1']='公司电话'
wb1['D1']='邮箱'
wb1.append(['上海分公司','xxxx','139354335','311400'])
wb.save(r'hn.xlsx') # 保存文件
保存文件
容易忘记
wb.save(r'hn.xlsx') # 保存文件
作业
尝试将红牛分公司数据保存到excel表格中
import requests
res=requests.get('http://www.redbull.com.cn/about/branch')
# res.content 转成bytes 类型数据
# print(res.text) #转成 解码之后的数据
with open(r'hn.html','wb')as hn_w:
hn_w.write(res.content)
import re
with open(r'hn.html','r',encoding='utf')as hn_r:
hn_info=hn_r.read()
# print(hn_info)
com_name=re.findall('><h2>(.*?)</h2>',hn_info)
com_addr=re.findall("<p class='mapIco'>(.*?)</p>",hn_info)
com_email=re.findall("<p class='mailIco'>(.*?)</p>",hn_info)
com_phone=re.findall("<p class='telIco'>(.*?)</p></li>",hn_info)
hn_list=zip(com_name,com_addr,com_email,com_phone)
hn_list=(list(hn_list))
from openpyxl import Workbook
wb=Workbook()
wb1=wb.create_sheet('红牛公司信息') # 创建列表
wb1.title='红牛分公司信息' # 支持二次修改
wb1['A1']='红牛公司名'
wb1['B1']='红牛公司地址'
wb1['C1']='邮编'
wb1['D1']='联系号码'
for i in hn_list:
wb1.append(list(i))
#
wb.save(r'hn.xlsx') # 保存文件