栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python-模块(4)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python-模块(4)

内容概览
  • re模块
  • 网络爬虫简介
  • 第三方模块下载
  • 爬取信息实操
  • openpyxl模块
re模块

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

import re

"""findall	获取所有能被匹配的数据,以列表返回"""
res = re.findall('a', 'abcabcabc')  # 第一个填正则表达式,第二个填待处理的文本
print(res)  # ['abc', 'abc', 'abc']

"""finditer	获取所有能被匹配的数据,以迭代器返回"""
res = re.finditer('a', 'abcabcabc')
print(res)  # 
print(res.__next__())  # 
print(res.__next__())  # 
"""search	只获取第一个能被匹配的数据,没有则返回None"""
res = re.search('a', 'abcabcabc')
print(res)  # 
print(res.group())  # bc

"""match	从起始位置匹配,如果匹配不上则返回None"""
res = re.match('abc', 'abcabcabc')
print(res.group())  # abc
res1 = re.match('bc', 'abcabcabc')
print(res1)  # None

"""compile	提前准备好正则表达式,之后可以反复使用"""
obj = re.compile('abc')
print(re.findall(obj, 'abcabcaab'))  # ['abc', 'abc']
print(re.findall(obj, 'aacababc'))  # ['abc']
方法作用
findall获取所有符合条件的值
search获取第一个符合条件的值
match获取开头符合条件的值
compile保存正则表达式
re模块补充
"""
分组
findall会优先展示匹配上的分组内的数据
"""
res = re.findall('a(b)c', 'abcabcabc')
print(res)  # ['b', 'b', 'b']

res = re.findall('a(?:b)c', 'abcabcabc')  # 在分组内使用?:取消优先展示
print(res)  # ['abc', 'abc', 'abc']
"""
分组可以使用group()获取组内数据
group()括号内默认值为0,代表所有数据值
输入1代表获取第一个组的数据
"""
res = re.search('a(b)(c)', 'abcabcabc')
print(res.group())  # abc
print(res.group(0))  # abc
print(res.group(1))  # b
print(res.group(2))  # c
"""
起别名
在分组时可以起一个名字
那么除了编号能获取数据,还可以使用名字获取
"""
res = re.search('a(?Pb)(?Pc)', 'abcabcabc')
print(res.group(1))  # b
print(res.group('id'))  # b
print(res.group(2))  # c
print(res.group('ip'))  # c
网络爬虫简介
  1. 什么是互联网
    将全世界计算机连接在一起组成的网络
  2. 发明互联网的目的
    使接入互联网的计算机都可以彼此共享数据
  3. 上网的本质
    基于互联网访问别人计算机上面的资源
  4. 网络爬虫本质
    模拟计算机浏览器朝目标网址发送请求获取数据
    只要是浏览器能访问的数据网络爬虫理论上都可以获取
第三方模块的下载
  • 第三方模块必须要先下载后才能导入使用
  • python下载第三方模块需要使用pip工具
  • 下载命令:pip 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/
    使用以下命令修改本次下载源地址:
    pip install 模块名 -i 源地址
  • 下载报错
  1. pip工具版本过低,使用报错信息里的更新命令更新pip工具即可
  2. 网络波动,多尝试几次下载,或者切换网络,错误关键码是read timed out
  3. 有些模块在下载使用前需要提前配置指定的环境,根据模块不同,查询各自需要的环境安装即可
  • 模块版本
    如果最新版本模块不兼容老版本python解释器,下载老版本的模块方法:
    pip install 模块名==版本号
爬取信息实操
import re
import reqursts

res = reqursts.get('目标网址')  # 朝目标地址发送网络请求,获取响应数据(相当于在浏览器地址栏中输入目标网址并回车)
print(res.content)  # 获取bytes类型数据
print(res.text)  # 获取解码后的数据
# 可以将数据保存到文件中,之后就不用每次都发送网络请求
with open(r'a.html', 'wb', encondin='utf8') as f:
	f.wrire(res.content)

# 读取文件数据
with open(r'a.html', 'r', encoding='utf8') as f:
	data = r.read()
"""先查看需要获取数据特征,编写正则"""
company_name_list = re.findall('(.*?)', data)
print(company_name_list)
company_addr_list = re.findall("(.*?)

", data) print(company_addr_list) company_email_list = re.findall("(.*?)

", data) print(company_email_list) company_phone_list = re.findall("(.*?)

", data) print(company_phone_list) # 将上边列表按位置整合,可以使用zip res = zip(company_name_list, company_addr_list, company_email_list, company_phone_list) print(res)
方法说明
get()朝目标地址发送网络请求获取响应数据
content获取bytes类型数据
text获取解码后的数据
openpyxl模块

openpyxl是第三方模块,需要先下载:pip install openpyxl
主要用于操作Excel表格
在python中能够操作Excel表格的模块有很多
openpyxl在近几年比较流行,不过对于03版本之前Excel文件兼容性不好
xlwt、xlrd也可以操作Excel表格,兼容所有版本,但是使用方式没有openpyxl方便
openpyxl实际使用:

from openpyxl import Workbook
"""1.创建excel文件"""
wb = Workbook()  # 创建Excel文件

wb1 = wb.create_sheet('a')  # 创建分页
wb2 = wb.create_sheet('b', 0)  # 设置这个分页放在第一个

wb1.title = 'y'  # 更改分页名

wb1.wheet_properties.tabColor = '1072BA'  # 修改工作簿颜色

"""2.写入数据"""
# 1.以Excel标识的行列名字写入
wb1['A2'] = 'A2'
wb1['C4'] = 'C4'

# 2.以指定行列的方式写入
wb1.cell(row=4, column=1, value='3行1列')

# 3.批量写入
wb1.append([1, 2, 3, 4, 5])

wb.save(r'abc.xlsx')  # 最后保存文件
方法说明
Workbook创建文件对象
create_sheet创建分页
title更改分页名
cell指定行列写入
append()批量写入
save()保存文件
练习
import re

from openpyxl import Workbook

with open(r'hn.html', 'r', encoding='utf8') as f:
    data = f.read()

company_info = re.finditer(r"(?P.*?)

(?P.*?)

(" r"?P.*?)

(?P.*?)

", data) wb = Workbook() wb1 = wb.create_sheet('公司数据', 0) wb1.append(['公司名称', '公司地址', '公司邮箱', '公司电话']) while True: try: all_info = company_info.__next__() wb1.append( [all_info.group('name'), all_info.group('addr'), all_info.group('email'), all_info.group('phone')] ) except StopIteration: wb.save('公司数据.xlsx') break
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1017895.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号