第三方模块

本文介绍了Python的re模块,包括findall、finditer、search、match和compile等方法,并通过实例展示了正则表达式的应用。此外,还讲解了网络爬虫的基础知识,包括下载第三方模块如requests,以及如何使用requests进行网页抓取。最后,通过openpyxl模块展示了如何将爬取的数据保存到Excel表格中,演示了创建和填充Excel表格的过程。
摘要由CSDN通过智能技术生成

Day28 第三方模块

1、re 模块

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

  1. re.findall

findall 通过正则表达式筛选出文本中所有符合条件的数据

import re
res = re.findall('a','jason oscar aaa')
print(res)
>>>>>>>>>>>>>>>
['a', 'a', 'a', 'a', 'a']
  1. re.finditer

finditer与 findall作用一致 只不过结果会被处理成迭代器对象 用于节省空间

import re
res=re.finditer('a','jason oscar aaa')
print(res)
>>>>>>>>>>>>>>>>>>>>>>>>>>
 <callable_iterator object at 0x000002514D4F5C70>
  1. re.search

search 通过正则表达式匹配到一个符合条件的内容就结束

import re
res=re.search('a','jason oscar aaa')
print(res)
print(res.group())
>>>>>>>>>>>>>>>>>>>>>>>>>
<re.Match object; span=(1, 2), match='a'>
a
  1. re.match

match 通过 正则表达式 从头开始匹配 如果头已经不符合 那么就直接结束

import re
res=re.match('a','jason oscar aaa')
print(res)
None
  1. re.compile

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

import re
obj=re.compile('a')
print(re.findall(obj,'ahfjklhala'))
>>>>>>>>>>>>>>>>>>>>>>>>>>
['a', 'a', 'a']

1.1、re模块补充说明

分组

findall针对分组的正则表达式匹配到的结果 优先展示

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

取消分组的优先展示

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

别名

import re
res=re.search('a(?P<id>b)(?P<name>c)','abcabcabcabc')
print(res.group())
print(res.group(1))
print(res.group('id'))
print(res.group('name'))
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
abc
b
b
c

2、网络爬虫简介

什么是互联网

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

互联网发明的目的是什么

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

上网的本质是什么

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

网络爬虫的本质

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

2.1、第三方模块的下载

第三方模块必须先下载才可以导入使用

python下载第三方模块需要借助于pip工具

解释器 终端下载命令 pip3.8 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/

修改下载仓库地址

临时修改源地址

pip3.8 install 模块名-i 源地址

pycharm提供第三方模块下载快捷方式
也可以直接修改python解释器源文件

下载报错

  1. pip 工具版本过低 直接拷贝提示信息里面的更新命令即可
python38 -m pip install --upgrade pip
  1. 网络波动 关键字 是read tinme out
    只需要重新下载几次即可 或者切换一个网络稳定一点的
  2. 有些模块在下载使用之前需要提前配置指定的环境

模块也有版本

格式:pip3.7 install 模块名==版本号
使用:pip3.7 install django==1.11.11

2.2、爬虫实战

import requests

import requests
res=requests.get('http://www.redbull.com.cn/about/branch')
# res.content  转成bytes 类型数据
print(res.text) #转成 解码之后的数据
with open(r'hn.html','wb')as hn_w:
    hn_w.write(res.content)  # 存为 hn.html文件

import re

import re
with open(r'hn.html','r',encoding='utf')as hn_r:
    hn_info=hn_r.read()
    # print(hn_info)
#通过 正则表达式 取文本中对应值
com_name=re.findall('><h2>(.*?)</h2>',hn_info) 
com_addr=re.findall("<p class='mapIco'>(.*?)</p>",hn_info)
com_email=re.findall("<p class='mailIco'>(.*?)</p>",hn_info)
com_phone=re.findall("<p class='telIco'>(.*?)</p></li>",hn_info)
#利用拉链 将每个公司的各 信息组成元组 再组合为迭代器
hn_list=zip(com_name,com_addr,com_email,com_phone)
# 循环 取出 格式化打印
for i in hn_list:
    print()
    print(f'公司名称:{i[0]}\n公司地址:{i[1]}\n公司邮编:{i[2]}\n公司联系电话:{i[3]}')

3、openpysl 模块

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

在python中能够操作excel表格的模块有很多,openpys属于近几年比较流行的模块(openpyxl针对03版本之前的excel文件兼容性不好)

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

excel版本问题

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

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

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

下载模块pip3.7 install openpyx1

3.1、openpyxl 实战

创建excel文件,创建表格

from openpyxl import Workbook
wb=Workbook()
wb1=wb.create_sheet('红牛公司信息') # 创建excel里表格
wb1.title='红牛分公司信息'  # 支持二次修改

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

添加内容

通过 列 行 编号添加

from openpyxl import Workbook
wb=Workbook()
wb1=wb.create_sheet('红牛公司信息') # 创建excel里表格
wb1.title='红牛分公司信息'
wb1['A1']='红牛公司名'   # 在列表A1中添加文本红牛公司
wb1['B1']='红牛公司地址' #在列表B1 处添加 文本 红牛公司地址
wb1['C1']='公司电话'
wb1['D1']='邮箱'

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

在这里插入图片描述

通过列表批量添加

from openpyxl import Workbook
wb=Workbook()
wb1=wb.create_sheet('红牛公司信息')  # 创建列表

wb1.title='红牛分公司信息'  # 支持二次修改
wb1['A1']='红牛公司名'  # 在列表A1中添加文本红牛公司
wb1['B1']='红牛公司地址'  #在列表B1 处添加 文本 红牛公司地址
wb1['C1']='公司电话'
wb1['D1']='邮箱'
wb1.append(['上海分公司','xxxx','139354335','311400'])

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

在这里插入图片描述

保存文件

容易忘记

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

作业

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

import requests
res=requests.get('http://www.redbull.com.cn/about/branch')
# res.content  转成bytes 类型数据
# print(res.text) #转成 解码之后的数据
with open(r'hn.html','wb')as hn_w:
    hn_w.write(res.content)
import re
with open(r'hn.html','r',encoding='utf')as hn_r:
    hn_info=hn_r.read()
    # print(hn_info)
com_name=re.findall('><h2>(.*?)</h2>',hn_info)
com_addr=re.findall("<p class='mapIco'>(.*?)</p>",hn_info)
com_email=re.findall("<p class='mailIco'>(.*?)</p>",hn_info)
com_phone=re.findall("<p class='telIco'>(.*?)</p></li>",hn_info)
hn_list=zip(com_name,com_addr,com_email,com_phone)
hn_list=(list(hn_list))

from openpyxl import Workbook
wb=Workbook()
wb1=wb.create_sheet('红牛公司信息')  # 创建列表

wb1.title='红牛分公司信息'  # 支持二次修改
wb1['A1']='红牛公司名'
wb1['B1']='红牛公司地址'
wb1['C1']='邮编'
wb1['D1']='联系号码'
for i in hn_list:
    wb1.append(list(i))
#
wb.save(r'hn.xlsx')  # 保存文件

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值