re模块、网络爬虫及openpyxl模块

re模块

模块详解

在python中如果想使用正则表达式,re模块是选择之一
"""
findall 通过正则表达式筛选出文本中所有符合条件的数据
"""
res = re.findall('a','jason oscar aaa')
print(res)  # ['a', 'a', 'a', 'a', 'a']  列表


"""
finditer与findall作用一致,只不过结果会被处理成迭代器对象,节省内存
"""
res1 = re.finditer('a','jason oscar aaa')
print(res1)  # <callable_iterator object at 0x10c791220>


"""
search 通过正则表达式匹配到一个符合条件的内容就结束
"""
res2 = re.search('a','jason oscar aaa')
print(res2)  # <re.Match object; span=(1, 2), match='a'>
print(res2.group())  # a

"""
match 通过正则表达式从头开始匹配,如果头部不符合,那么就结束
"""
res3 = re.match('a','jason oscar aaa')
print(res3)  # None

"""
compile 能够提前准备好正则,之后可以反复使用,减少代码冗余
"""
obj =re.compile('a')
print(re.findall(obj,'aaa'))  # ['a', 'a', 'a']
print(re.findall(obj,'bbb'))  # []
print(re.findall(obj,'abc'))  # ['a']

re模块补充说明

1.分组
import re
res = re.findall('abc','abcabcabcabc')
print(res)  # ['abc', 'abc', 'abc', 'abc']

"""
findall针对分组的正则表达式匹配到的结果,优先展示
"""
res1 = re.findall('a(b)c','abcabcabcabc')
print(res1)  # ['b', 'b', 'b', 'b']

"""
findall也能够取消分组优先展示(?:)
"""
res2 = re.findall('a(?:b)c','abcabcabcabc')
print(res2)  # ['abc', 'abc', 'abc', 'abc']

res3 = re.search('a(b)c','abcabcabcabc')
print(res3)  # # <re.Match object; span=(0, 3), match='abc'>
print(res3.group(0))  # abc
print(res3.group(1))  # b

2.别名
res = re.search('a(?P<id>b)(?P<name>c)','abcabcabcabc')
print(res)  # <re.Match object; span=(0, 3), match='abc'>
print(res.group())  # abc
print(res.group(0))  # abc
print(res.group('id'))  # b
print(res.group('name'))  # c

网络爬虫

网络爬虫简介

1.什么是互联网
    将全世界的计算机连接到一起组成的网络
2.互联网发明的目的是什么
    将接入互联网的计算机上面的数据彼此共享
3.上网的本质是什么
    基于互联网访问别人计算机上面的资源(有些计算机存在的意义就是让别人访问,这种计算机我们也称之为服务器)
4.网络爬虫的本质
    模拟计算机浏览器朝目标网址发送请求回去数据并筛选
	只要是浏览器可以访问到的数据网络爬虫理论上都可以
5.获取红牛分公司数据
    http://www.redbull.com.cn/about/branch

爬取公司信息

import requests
import re
# 朝目标地址发送网络请求获取响应数据(相当于在浏览器地址栏中输入网址并回车)
# response= requests.get('http://redbull.com.cn/about/branch/')
# 获取bytes类型的数据
# response.content  # 获取bytes类型的数据
# 获取解码之后的数据
res = response.text
with open('a.html','w') as f:  # 为了防止红牛网站崩溃,先爬取数据然后写入文件在操作
    f.write(res)
with open('a.html','r',encoding='utf8') as f:
    res = f.read()
# 1.获取所有的分公司名称
company_name = re.findall('<h2>(.*?)</h2>',res)
# 2.获取所有的分公司地址
company_addr = re.findall("<p class='mapIco'>(.*?)</p>",res)
# 3.获取所有的分公司邮箱
company_email= re.findall("<p class='mailIco'>(.*?)</p>",res)
# 4.获取所有的分公司电话
company_phone = re.findall("<p class='telIco'>(.*?)</p>",res)
# 5.将上述4个列表中的数据按照位置整个
info = zip(company_name,company_addr,company_email,company_phone)
for i in info:
    print("""
    1.公司:%s
    2.公司地址:%s
    3.编号:%s
    4.电话:%s
    """ % i)

第三方模块的下载

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工具版本过低,直接拷贝提示信息里面的更新命令即可
	python3.8 -m pip install --upgrade pip
    2.网络波动 关键字是 read timed out
	只需要重新下载几次即可,或者切换稳定的网络环境
    3.有些模块在下载使用之前需要提前配置指定的环境
	结合具体情况,百度搜索
	
3.模块也有版本
    pip3.8 install 模块名==版本号
	pip3.8 install django==1.11.11
"""

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

openpyxl实操

from openpyxl import Workbook

# 1.创建excel文件
wb = Workbook()
wb1 = wb.create_sheet('学生表')
wb2 = wb.create_sheet('财务表')
wb1.sheet_properties.tabColor = '1072BA'


# 写入数据
# 第一种写入方式
wb1['A1'] = 'name'
wb1['B1'] = 'score'
# 第二种写入方式
wb1.cell(row=2,column=1,value='jason')
# 第三种写入方式
wb2.append(['姓名','工资','职位'])

wb1.append(['username', 'password', 'age', 'gender', 'hobby'])
wb1.append(['jason1', 123, 18, 'male', 'read'])
wb1.append(['jason2', 123, 18, 'male', 'read'])
wb1.append(['jason3', 123, 18, 'male', 'read'])
wb1.append(['jason4', 123, 18, 'male', 'read'])
wb1.append(['jason4', 123, 18, 'male', None])
wb1.append([None, 123, 18, 'male', ''])

# 计算B4到B9的总和
wb1['F10']= '=sum(B4:B9)'
wb.save(r'111.xlsx')

作业

第二题

import requests
import re
from openpyxl import Workbook
# 朝目标地址发送网络请求获取响应数据(相当于在浏览器地址栏中输入网址并回车)
response= requests.get('http://redbull.com.cn/about/branch/')
# 获取bytes类型的数据
# response.content  # 获取bytes类型的数据
# 获取解码之后的数据
res = response.text
# 1.获取所有的分公司名称
company_name = re.findall('<h2>(.*?)</h2>',res)
# 2.获取所有的分公司地址
company_addr = re.findall("<p class='mapIco'>(.*?)</p>",res)
# 3.获取所有的分公司邮箱
company_email= re.findall("<p class='mailIco'>(.*?)</p>",res)
# 4.获取所有的分公司电话
company_phone = re.findall("<p class='telIco'>(.*?)</p>",res)
# 5.将上述4个列表中的数据按照位置整个
info = zip(company_name,company_addr,company_email,company_phone)
wb = Workbook()
wb1= wb.create_sheet('红牛分公司信息表')
wb1.append(['公司名称','公司地址','公司邮箱','公司电话'])
for i in info:
    wb1.append(i)
wb.save('红牛分公司信息表.xlsx')
posted @ 2022-07-20 15:43  荀飞  阅读(37)  评论(0编辑  收藏  举报