小白学python系列————【Day36】re模块,requests模块,openpyxl模块

今日内容概要

  • re模块
  • 网络爬虫简介
  • 第三方模块的下载
  • 爬虫示例之爬取地址信息
  • openpyxl模块

re模块

(1)re模块常用功能:

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

import re
res = re.findall('a','jason oscar aaa')
print(res)   # 结果是个列表  
# ['a', 'a', 'a', 'a', 'a']

2.re.finditer
finditer与findall作用一致,只不过结果会被处理成迭代器对象,用于节省内存

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

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

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

4.re.match
match通过正则表达式从头开始匹配,如果头部已经不符合,那么后面则直接不执行

import re
res = re.match('a','jason oscar aaa')
print(res)         # None
res1 =re.match('a','ason oscar aaa')
print(res1)        # <_sre.SRE_Match object; span=(0, 1), match='a'>

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

import re
obj = re.compile('a')    # 提前定义好一个正则
print(re.findall(obj,'safsecxcfdwerwrdd'))    # ['a']
print(re.findall(obj,'saafedasadasfe3as'))    # ['a', 'a', 'a', 'a', 'a', 'a']
print(re.findall(obj,'adsfawdxfadaswdad'))    # ['a', 'a', 'a', 'a', 'a']

(2)re模块特殊补充

1.分组
(1)re.findall

import re
res = re.findall('abc','abcabcabc')
print(res)    # ['abc', 'abc', 'abc']

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

import re
res1 = re.findall('a(b)c','abcabcabc')
print(res1)    # ['b', 'b', 'b']

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

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

(2)re.search

import re
res = re.search('a(b)(c)','abcabcabc')
print(res.group())      # abc
print(res.group(1))     # b
print(res.group(2))     # c**

2.别名
一般用在search和match,不建议在findall使用!!!
结构:?P<别名>

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

网络爬虫简介

1.什么是互联网
将全世界的计算机连接到一起组成的网络

2.互联网发明的目的是什么
将接入互联网的计算机上面的数据彼此共享

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

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

第三方模块的下载

1.第三方模块使用条件
第三方模块必须先下载才可以导入使用
python下载第三方模块需要借助于pip工具

2.下载命令
pip3.6(python解释器版本) install 模块名

3.下载时常见问题列举分析:
(1)下载速度很慢
pip工具默认是从国外的仓库地址下载模块,所以速度会很慢
解决方法:我们可以切换下载地址(源地址)
使用命令:pip3.6(python解释器版本) install 模块名 -i 源地址
常用镜像地址(源地址):
清华大学 :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/
(2)下载报错
报错类型一:pip工具版本过低 直接拷贝提示信息里面的更新命令即可
请添加图片描述
命令:python36(解释器版本) -m pip install --upgrade pip
报错类型二:网络波动 关键字是Read timed out
请添加图片描述
解决办法:只需要重新下载几次即可 或者切换一个网络稳定一点的
报错类型三:有些模块在下载使用之前需要提前配置指定的环境
解决办法:结合具体情况 百度搜索

4.下载模块成功
请添加图片描述

5.切换源地址
除了上面所说的cmd窗口中输入命令切换下载源地址外,也可以直接修改python解释器源文件
具体步骤:
步骤一:点击File---->Settings---->Project Day27(这是我的文件名)---->Python interpreter
请添加图片描述
步骤二:所展示窗口为python解释器已经下载过的模块名
请添加图片描述
步骤三:双击任意模块名,输入想要模块名,下载或添加。
请添加图片描述
步骤四:添加源地址成功,这边原本国外源地址可以删也可以不删。
请添加图片描述

6.pycharm智能下载第三方模块
eg:pycharm提示下载django模块
请添加图片描述
这时候直接点击下载即可!!!

7.模块也有版本
命令:pip3.6(python解释器版本) install 模块名 == 版本号
eg:pip3.6 install django==1.11.11
.

爬虫示例之爬取地址信息

需求:获取红牛分公司数据

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模块

1.模块描述:
主要用于操作excel表格 也是pandas底层操作表格的模块

2.excel表格操作
在python中能够操作excel表格的模块有很多,openpyxl针对03版本之前的excel文件兼容性不好。
xlwt、xlrd也可以操作excel表格,同样兼容所有版本的excel文件 但是使用方式没有openpyxl简单。

3.excel版本问题
03版本之前 excel文件的后缀名 .xls
03版本之后 excel文件的后缀名 .xlsx

4.openpyxl实操
(1)创建excel文件

# 创建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"  # 修改工作簿颜色

(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',''])

作业展示

  • 尝试将红牛分公司数据保存到excel表格中
# 导入模块
import requests
from openpyxl import Workbook
# 朝目标地址发送网络请求获取响应数据
res = requests.get('http://www.redbull.com.cn/about/branch')
# 将数据提前保存到文件中
with open(r'hn.html','wb') as f:
    f.write(res.content)
import re
# 读取页面数据
with open(r'hn.html','r',encoding='utf8')as f:
    date = f.read()
# 获取所有分公司名称
company_name_list = re.findall('<h2>(.*?)</h2>',date)
# 获取所有的分公司地址
company_addr_list = re.findall("<p class='mapIco'>(.*?)</p>", date)
# 获取所有的分公司邮箱
company_email_list = re.findall("<p class='mailIco'>(.*?)</p>", date)
# 获取所有的分公司电话
company_phone_list = re.findall("<p class='telIco'>(.*?)</p>", date)
# zip内置函数对应连接上面四个函数
res = zip(company_name_list,company_addr_list,company_email_list,company_phone_list)
ci = Workbook()
ci1 = ci.create_sheet('公司信息表',0)
ci1.sheet_properties.tabColor = "1072BA" # 修改工作簿颜色

ci1.append(['company_name','company_addr','company_email','company_phone'])
for i in res:
    ci1.append(i)
ci.save(r'111.xlsx')  # 保存文件
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值