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

Day27——re模块,第三方模块,网络爬虫实战,openpyxl模块

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

Day27——re模块,第三方模块,网络爬虫实战,openpyxl模块

文章目录
  • re模块
  • 网络爬虫简介
  • 第三方模块
  • 网络爬虫实战
  • openpyxl模块
  • openpyxl实操
  • 今日练习

re模块
  • 引言

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

    2.在python中无法直接使用正则 需要借助于模块(1.内置的re模块2.第三方的其他模块)

    3.有一些模块内置函数在调用时需要连续编写正则表达式,这样的话就可以提前写好后续需要经常使用的正则
    变量名=re.compile(正则表达式)
    re.函数名(变量名,待匹配文本)

  • 常见的四种函数方法

    函数名功能
    findall通过正则表达式筛选出文本中所有符合条件的数据
    search通过正则表达式匹配到一个符合条件的内容就结束
    match通过正则表达式从头开始匹配 如果头部已经不符合 那么后面不走了,如果符合也是只取一次
    compile能够提前准备好正则 之后可以反复使用 减少代码冗余

    re.findall

    语法结构

    re.findall('正则表达式', '待匹配文本')
    

    使用说明

    在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

    举例说明

    import re
    
    res = re.findall('a', 'fsafjahajsfffhfwaefhaaa')
    print(res)  # ['a', 'a', 'a', 'a', 'a', 'a', 'a']
    

    还有一个‘孪生兄弟’ finditer: 转换成迭代器(待匹配文本过大)

    import re
    
    res = re.finditer('a', 'fsafjahajsfffhfwaefhaaa')
    print(res)  # 
    print(res.__next__())  # <_sre.SRE_Match object; span=(2, 3), match='a'>
    print(res.__next__())  # <_sre.SRE_Match object; span=(5, 6), match='a'>
    

    re.search

    语法结构

    re.search('正则表达式', '待匹配文本')
    

    使用说明

    1.re.search 扫描整个字符串并返回第一个成功的匹配,如果没有匹配,就返回一个 None。
    2.re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达 式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配

    举例说明

    import re
    
    res = re.search('a', 'fsafjahajsfffhfwaefhaaa')
    print(res)  # <_sre.SRE_Match object; span=(2, 3), match='a'>
    

    re.match

    语法结构

    re.search('正则表达式', '待匹配文本')
    

    用法说明

    1.从字符串的起始位置匹配,如果不是起始位置匹配成功的话,match()就返回None。匹配成功re.match方法返回一个匹配的对象。
    2.匹配到数据的话,可以使⽤group⽅法来提取数据。以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
    3.group()用来提出分组截获的字符串,()用来分组,group() 同group(0)就是匹配正则表达式整体结果,group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。没有匹配成功的,re.search()返回None。

    举例说明

    import re
    
    res = re.match('a', 'fsafjahajsfffhfwaefhaaa')
    print(res)  # None
    res = re.match('f', 'fsafjahajsfffhfwaefhaaa')
    print(res)  # <_sre.SRE_Match object; span=(0, 1), match='f'>
    print(res.group())  # f
    res = re.match('a(b)(c)', 'abcabcabcabcabcabc')
    print(res.group(0))  # abc
    print(res.group(1))  # b
    

    re.compile

    语法结构

    变量名=re.compile(正则表达式)
    re.函数名(变量名,待匹配文本)
    

    使用说明

    compile能够提前准备好正则 之后可以反复使用 减少代码冗余

    举例说明

    import re
    
    res = re.compile('a')
    
    print(re.findall(res, 'adsadfudfds'))
    print(re.findall(res, 'sasaghadsasggh'))
    
  • re模块补充说明

    分组

    import re
    
    res = re.findall('abc','abcabcabcabc')
    print(res)  # ['abc', 'abc', 'abc', 'abc']
    res = re.findall('a(b)c','abcabcabcabc')
    print(res)  # ['b', 'b', 'b', 'b']
    res = re.findall('a(?:b)c', 'abcabcabcabc')
    print(res)  # ['abc', 'abc', 'abc', 'abc']
    

    findall也能够取消分组优先展示 (?:)

    别名(?P<>)

    import re
    
    res = re.search('a(?Pb)(?Pc)','abcabcabcabc')
    print(res.group())  # abc
    print(res.group(1))  # a
    print(res.group('id'))  # b
    print(res.group('name'))  # c
    
网络爬虫简介

思考

1.什么是互联网?

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

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

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

3.上网的本质是什么?

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

4.网络爬虫的本质

模拟计算机浏览器朝目标网址发送请求回去数据并筛选
只要是浏览器可以访问到的数据网络爬虫理论上都可以

5.获取红牛分公司数据

http://www.redbull.com.cn/about/branch
第三方模块

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 源地址

2.下载报错
1.pip工具版本过低 直接拷贝提示信息里面的更新命令即可

python38 -m pip install --upgrade pip

2.网络波动 关键字是Read timed out

只需要重新下载几次即可 或者切换一个网络稳定一点的

3.有些模块在下载使用之前需要提前配置指定的环境

结合具体情况 百度搜索

3.模块也有版本
pip3.8 install 模块名==版本号

eg: pip3.8 install django==1.11.11

pycharm提供第三方模块下载快捷方式




网络爬虫实战

下载模块

实战演练

import re

import requests

res = requests.get('http://www.redbull.com.cn/about/branch')

with open(r'reptile.html', 'wb') as f:
    f.write(res.content)

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

company_name = re.findall('(.*?)', data)

company_address = re.findall("

(.*?)

", data) company_email = re.findall("

(.*?)

", data) company_phone = re.findall("

(.*?)

", data) res = zip(company_name, company_address, company_email, company_phone) for i in res: # ('红牛杭州分公司', '杭州市上城区庆春路29号远洋大厦11楼A座', '310009', '0571-87045279/7792') print(""" 公司名称:%s 公司地址:%s 公司邮箱:%s 公司电话:%s """ % i)

效果图

openpyxl模块
  • 作用

    主要用于操作excel表格 也是pandas底层操作表格的模块
    
  • 了解

    在python中能够操作excel表格的模块有很多
    openpyxl属于近几年比较流行的模块
    openpyxl针对03版本之前的excel文件兼容性不好
    xlwt、xlrd也可以操作excel表格
    兼容所有版本的excel文件 但是使用方式没有openpyxl简单

  • excel版本问题

    03版本之前 excel文件的后缀名 .xls
    03版本之后 excel文件的后缀名 .xlsx
    如果是苹果电脑excel文件的后缀 .csv

  • 下载模块

    pip3.8 install openpyxl

openpyxl实操
1.创建excel文件
	 from openpyxl import Workbook  # 导入模块

    wb = Workbook()  # 创建excel文件

    wb1 = wb.create_sheet('成绩表')
    wb2 = wb.create_sheet('财务表')
    wb3 = wb.create_sheet('校花表', 0)

    wb1.title = '舔狗表'  # 支持二次修改
    wb1.sheet_properties.tabColor = "1072BA"  # 修改工作簿颜色

    wb.save(r'111.xlsx')  # 保存文件
    
2.写入数据
	# 第一种写入方式
    wb1['A1'] = '叙利亚悍匪'
    wb1['D2'] = '慢男'
    # 第二种写入方式
    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['F11'] = '=sum(B5:B10)'
今日练习
  • 尝试将红牛分公司数据保存到excel表格中
from openpyxl import Workbook  # 导入模块

import re

import requests

res = requests.get('http://www.redbull.com.cn/about/branch')

with open(r'reptile.html', 'wb') as f:
    f.write(res.content)

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

company_name = re.findall('(.*?)', data)

company_address = re.findall("

(.*?)

", data) company_email = re.findall("

(.*?)

", data) company_phone = re.findall("

(.*?)

", data) wb = Workbook() # 创建excel文件 wb1 = wb.create_sheet('公司信息表', 0) # wb2 = wb.create_sheet('电话表', 1) res = zip(company_name, company_address, company_email, company_phone) wb1.append(['公司名称', '公司地址', '公司邮编', '公司电话']) for i in res: # ('红牛杭州分公司', '杭州市上城区庆春路29号远洋大厦11楼A座', '310009', '0571-87045279/7792') wb1.append(i) wb.save(r'lzq.xlsx') # 保存文件

效果图

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1017970.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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