re模块、第三方模块(网络爬虫、操作Excel)

re模块

在python中如果想要使用正则表达式 re模块是选择之一

1.re.findall()

import re

res = re.findall('a', 'jason scoall anjqak')
print(res)  # ['a', 'a', 'a', 'a']
'''
'a',表示的是正则表达式,要去右边的文本中查找符合表达式数据
结果是一个列表
'''

2.re.finditer()

import re

res1 = re.finditer('a', 'jason scoall anjqak')
print(res1)  # <callable_iterator object at 0x000001F3E0B05C70>
for i in res1:
    print(i)
'''
<re.Match object; span=(1, 2), match='a'>
<re.Match object; span=(9, 10), match='a'>
<re.Match object; span=(13, 14), match='a'>
<re.Match object; span=(17, 18), match='a'>
'''
'''
它产生的结果是一个迭代器,可以使用双下next进行取值
findall()与finditer()作用一致,只不过结果会被处理成迭代器对象,用于节省内存
'''

3.re.search()

res2 = re.search('a', 'jason scoall anjqak')
print(res2)  # <re.Match object; span=(1, 2), match='a'>
'''
search通过正则表达式匹配到一个符合条件的内容就结束
'''
print(res2.group())  # a
'''
单独拿a的话可以使用group
'''

4.re.match()

res = re.match('a', 'jason scoall anjqak')
print(res)  # None
'''
match通过正则表达式从头开始匹配 如果头部已经不符合 后面的就不再看了
'''

5.re.compile()

res = re.compile('a')
print(re.findall(res, 'ajhhjabjskiw'))
print(re.findall(res, 'asdghjlore'))
print(re.findall(res, 'aaaaaaa'))
'''
['a', 'a']
['a']
['a', 'a', 'a', 'a', 'a', 'a', 'a']
compile 能够提前准备好正则,之后可以反复使用,介绍代码冗余
'''

6.分组

res = re.findall('abc', 'abcabcbabcabc')
print(res)  # ['abc', 'abc', 'abc', 'abc']
res1 = re.findall('a(b)c', 'abcabcbabcabc')
print(res1)  # ['b', 'b', 'b', 'b']
'''
1.给某一个表达式增加一个分组,不影响正则表达式的匹配,匹配的还是原来的
2.结果是['b', 'b', 'b', 'b'],是因为findall针对分组的表达式匹配到的结果 优先展示
'''
res2 = re.search('a(b)c', 'abcabcbabcabc')
print(res2)  # <re.Match object; span=(0, 3), match='abc'>
print(res2.group())  # abc
print(res2.group(0))  # abc
print(res2.group(1))  # b
print(res2.group(2))  # 报错

'''
分组针对search方法没有任何影响,
可以将search这个方法返回的结果看作是一个列表,索引0是正则表达式,后面的索引对应的是分组的情况
res2 = re.search('a(?:b)c', 'abcabcbabcabc')  取消分组优先展示的情况
'''

7.别名

res = re.search('a(?P<id>b)c', 'abcabcbabcabc')
print(res.group())  # abc
print(res.group(1))  # b
print(res.group('id'))  # b
'''
起别名主要用于search、match
'''

网络爬虫

1.什么是互联网

​ 将全世界的计算机连接到一起组成的网络

2.互联网发明的目的是什么

​ 将接入互联网的计算机上面的数据彼此共享

3.上网的本质是什么

​ 基于互联网访问别人计算机上的资源,有些计算机存在的意义就是让别人访问,这种类型的计算机我们称之为服务器

4.网络爬出的本质

​ 模拟计算机朝目标网站发送请求回去数据筛选

​ 只是浏览器可以访问到的数据网络爬虫理论上都可以

第三方模块

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

requests模块--网络爬虫

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模块--操作excel模块,也是pandas底层操作表格的模块

1.在python中能够操作excel表格的模块有很多

​ openpyxl属于近几年比较流行的模块,openpyxl针对03版本之前的excel文件兼容性不好

​ xlwt、xlrd也可以操作excel表格,兼容所有版本的excel文件 但是使用方式没有openpyxl简单

2.excel版本问题

​ 03版本之前 excel文件的后缀名 .xls

​ 03版本之后 excel文件的后缀名 .xlsx

​ 如果是苹果电脑excel文件的后缀 .csv

3.下载模块

​ pip3.8 install openpyxl

4.通过代码实现表格的操作

from openpyxl import Workbook

# 创建一个工作簿
wb = Workbook()
# 创建多个工作簿
wb1 = wb.create_sheet('成绩表')
wb2 = wb.create_sheet('财务表')
# 将表放到第一个位置
wb3 = wb.create_sheet('水电表', 0)
# 修改表名,支持二次修改
wb3.title = '花名册'
# 给表名加颜色,使用rgb
wb2.sheet_properties.tabColor = "1072BA"
# 保存文件
wb.save(r'111.xlsx')



# 第一种写入方式
wb1['A1'] = '叙利亚悍匪'
wb1['B1'] = '玛卡巴卡'
# 第二种写入方式
wb1.cell(row=3, column=2, value='老六慢走')

# 第三种写入方式(批量写入)
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', ''])
wb1['c12'] = '=sum(B5:B10)'

# 保存文件
wb.save(r'111.xlsx')

课后练习

1.尝试将红牛分公司数据保存到excel表格中

import re
from openpyxl import Workbook

# 1.创建一个工作簿
wb = Workbook()
# 2.创建一个表格
table = wb.create_sheet('红牛分公司数据表', 0)
# 3.批量写入头部内容
table.append(['公司名称', '公司地址', '公司邮箱', '公司电话'])
# 读取页面数据
with open(r'hn.html', 'r', encoding='utf8') as f:
    data = f.read()
# 3.获取所有的分公司名称
company_name_list = re.findall('<h2>(.*?)</h2>', data)
# 4.获取所有的分公司地址
company_addr_list = re.findall("<p class='mapIco'>(.*?)</p>", data)
# 5.获取所有的分公司邮箱
company_email_list = re.findall("<p class='mailIco'>(.*?)</p>", data)
# 6.获取所有的分公司电话
company_phone_list = re.findall("<p class='telIco'>(.*?)</p>", data)
res = zip(company_name_list, company_addr_list, company_email_list, company_phone_list)
# 7.处理数据(展示 保存 excel)
for i in res:  # ('红牛杭州分公司', '杭州市上城区庆春路29号远洋大厦11楼A座', '310009', '0571-87045279/7792')
    table.append(i)
# 保存文件
wb.save(r'hongNiuTable.xlsx')

image-20220720190914420

2.自行查阅openpyxl官网学习更多操作

posted @ 2022-07-20 19:12  小张不爱吃泡面  阅读(116)  评论(0编辑  收藏  举报