学习Python-Day24
今日学习内容
一、re模块常见的方法
在python中如果想要使用表达式 热模块是选择之一
import re
1.findall
'findally 通过正则表达式筛选出文本中所有符合条件的数据。'
res = re.findall('x', 'xcc xh xzhwyb ywszd xxx')
print(res) #['x', 'x', 'x', 'x', 'x', 'x']
2.finditer
'针对文本或者数据过多用迭代器对象去解决,可以用 __next__获取数据。'
'finditer 与 findall 作用一致,只不过结果会被处理成迭代器对象,用于节省内存。'
res = re.finditer('x', 'xcc xh xzhwyb ywszd x')
print(res) #
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
'运行结果:
'
3.search
'search通过正则表达式匹配到一个符合条件的内容就结束'
res = re.search('x', 'cc xh xzhwyb ywszd x')
print(res)
'运行结果:
'
4.match
'match通过正则表达式从头开始匹配,如果头部已经不符合,那么后面结束了。'
res = re.match('x', 'cc xh xzhwyb ywszd x')
print(res) # None
res1 = re.match('x', 'xcc xh xzhwyb ywszd x')
print(res1) #
5.compile
'compile能够提前准备好正则,之后可以反复使用,减少代码冗余'
obj = re.compile('x')
print(re.findall(obj, 'xcc xh xzhwyb ywszd xx'))
print(re.findall(obj, 'c xh xzhwyb ywszd xx'))
print(re.findall(obj, 'xsdwsieuxh'))
'运行结果:
['x', 'x', 'x', 'x', 'x']
['x', 'x', 'x', 'x']
['x', 'x']'
二、re模块补充说明
1.分组 ()
1.1 findall针对分组的正则表达式匹配到的结果 优先展示
res = re.findall('wyb', 'wybaixzwybaixz')
print(res) # ['wyb', 'wyb']
res = re.findall('w(y)b', 'wybaixzwybaixz')
print(res) #['y', 'y']
1.2 findall也能够取消分组优先展示 (?:)
res = re.findall('w(?:y)b', 'wybaixzwybaixz')
print(res) #['wyb', 'wyb']
1.3 search 针对分组的正则表达式没有优先展示,
但是可以用索引的方式拿出指定的数值。
res = re.search('w(y)b', 'wybaixzwybaixz')
print(res.group())
print(res.group(0))
print(res.group(1))
'运行结果:
wyb
wyb
y'
2.别名
res = re.search('w(?Py)(?Pb)', 'wybaixzwybaixz')
print(res.group())
print(res.group(1))
print(res.group('id'))
print(res.group('name'))
'运行结果:
wyb
y
y
b'
三、网络爬虫简介
-
什么是互联网
将
全世界的计算机连接到一起组成的网络。 -
互联网发明的目的是什么
将接入互联网的计算机上面
数据彼此共享 -
上网的本质是什么
基于互联网访问别人计算机上面的资源。
有些计算机的存在的意义就是让别人访问,这种类型的计算机我们也称之为
服务器。 -
网络爬虫的本质
模拟计算机浏览器潮目标网址发送请求回去数据并筛选。
只要浏览器可以访问到的数据网络爬虫理论上都可以。
-
获取红牛分公司数据
http://www.redbull.com.cn/about/branch
四、第三方模块下载
-
第三方模块必须先下载才可以导入使用
-
python下载第三方模块需要借助于pip工具 -
下载命令
pip3.8 install 模块名1.下载速度很慢 1.1pip工具默认是从国外的仓库地址下载的模块,下载速度会很慢。 我们可以切换下载的地址(源地址) 清华大学 :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/ 1.2 pip3.8 install 模块名 -i 源地址 1.3 pycharm 提供第三方模块下载快捷方式 1.4 直接修改python解释器源文件(课后自行查阅) Windows : 找到python安装目录下:Libsite-packagespipmodelsindex.py文件,将PYPI的值改为你所需要的镜像源即可。 #PyPI = Index('https://pypi.python.org/') PyPI = Index('https://pypi.douban.com/') 修改配置文件永久换源(Windows): 1.文件管理器文件路径地址栏敲:%APPDATA% 回车,快速进入 C:Users电脑用户AppDataRoaming 文件夹中. 2.新建 pip 文件夹并在文件夹中新建 pip.ini 配置文件. 3.新增 pip.ini 配置文件内容 [global] index-url = http://pypi.douban.com/simple [install] use-mirrors =true mirrors =http://pypi.douban.com/simple/ trusted-host =pypi.douban.com 2.下载报错 2.1 pip工具版本过低,直接拷贝提示信息里面的更新命令即可 python38 -m pip install --upgrade pip 2.2 网络波动,关键字的 Read time out 只需要重新下载几次即可,或者切换一个网络稳定一点的。 2.3 有些模块在下载使用前需要提前配置指定的环境 结合具体情况,百度搜索。 3.模块也有版本 pip3.8 install 模块名==版本号 pip3.8 install django==1.11.11 (切换版本号)
五、爬取分公司数据
import re
#读取页面数据
with open(r'hongniu.html', 'r', encoding='utf8') as f:
data = f.read()
#研究目标数据的特征,编写正则筛选。
#1.获取所有公司的名称
name_list = re.findall('(.*?)
', data)
#print(name_list)
#2.获取所有分公司地址
addr_list = re.findall("(.*?)
", data)
#print(addr_list)
#3.获取所有分公司邮政编号
email_list = re.findall("(.*?)
", data)
#4.获取所有分公司电话
phone_list = re.findall("(.*?)
", data)
#5.以上获得的表格中数据按照位置整合
res = zip(name_list, addr_list, email_list, phone_list)
#6.处理数据(展示 保存到excel)
for i in res:
print("""
公司名称:%s
公司地址:%s
公司邮箱:%s
公司电话:%s
""" % i)
六、excel文件简介
主要用于操作excel表格,也是pandas底层操作表格的模块。
在python中能够操作excel表格的模块有很多
-
openpyxl属于近几年比较流行的模块,openpyxl针对03版本之前的excel文件兼容性不好。
-
xlwt、xlrd也可以操作excel表格? 兼容所有版本的excel文件,但是使用方式没有
openpyxl简单。
-
excel版本03版本前 文件后缀名
.xls03版本后 文件后缀名
.xlsx苹果电脑excel文件的后缀
.csv -
下载模块
pip3.8 install openpyxl
七、openpyxl实操
1.创建excel文件
wb = Workbook()
wb1 = wb.create_sheet('成绩表')
wb2 = wb.create_sheet('成员表')
#支持二次修改
wb1.title = '男女神表'
#修改工作簿颜色
wb1.sheet_properties.tabColor == "1072BA"
2.写入数据
第一种写入方式:
wb1['A1'] = '肖战'
wb1['A3'] = '王一博'
wb1['B2'] = 'szd'
第二种写入方式:
wb1.cell(row=3, column=3, value='bjyx')
第三种写入方式(批量写入):
wb1.append(['username', 'password', 'age', 'gender', 'hobby'])
wb1.append(['肖战', 123, 30, 'male', 'sing'])
wb1.append(['王一博', 321, 24, 'male', 'dance'])
wb1.append(['刘诗诗', 222, 32, 'female', '哈哈哈'])
wb1.append(['xc', 123, 17, 'female', None])
可以进行就和的数学公式
wb1['C10'] = '=sum(C5:C8)'
保存文件
wb.save(r'02.xlsx')
作业
尝试将红牛分公司数据保存到excel表格
import re
from openpyxl import Workbook
#读取页面数据
with open(r'hongniu.html', 'r', encoding='utf8') as f:
data = f.read()
#研究目标数据的特征,编写正则筛选。
#1.获取所有公司的名称
name_list = re.findall('(.*?)
', data)
#print(name_list)
#2.获取所有分公司地址
addr_list = re.findall("(.*?)
", data)
#print(addr_list)
#3.获取所有分公司邮政编号
email_list = re.findall("(.*?)
", data)
#4.获取所有分公司电话
phone_list = re.findall("(.*?)
", data)
#5.以上获得的表格中数据按照位置整合
res = zip(name_list, addr_list, email_list, phone_list)
# #创建excel文件
wb = Workbook()
#创建表
wb1 = wb.create_sheet('分公司信息表')
#写入数据
wb1.append(['公司名称', '公司地址', '公司邮箱', '公司电话'])
#6.处理数据(展示 保存到excel)
for i in res:
if i == '':
i = None
wb1.append(i)
# print("""
# 公司名称:%s
# 公司地址:%s
# 公司邮箱:%s
# 公司电话:%s
# """ % i)
wb.save(r'02.xlsx')