python27基础-re模块-网络爬虫-openpyxl模块
今日学习
re 模块
第三方模块简介
网络爬虫实战
openpyxl模块
random模块
hashib模块
re模块
模块中,如果想用正则表达式,re模块是选择之一
名称 | 作用 |
---|---|
re.findall() | 通过正则表达式筛选出文本中所有符合条件的数据 |
re.finditer() | 和re.findall()作用一样,只不过结果会被处理成迭代器对象,用于节省内存,可以通过for循环或者双下next取值 |
re.search() | 通过正则表达式匹配一个符合条件的内容就结束 |
re.match() | 通过正则表达式从头开始匹配,如果头部已经不符合,那么后面不走 |
re.compile() | 能够提前准备好正则,之后可以反复使用,减少代码冗余 |
#-----------------------------练习-----------------------------------------------
import re
res = re.findall('a','jason oscar aaa')
print(res) 过滤出来的内容返回成list形式展示
----------执行结果------------
['a', 'a', 'a', 'a', 'a']
------------------【re.finditer】练习-------------------------------------
import re
res = re.finditer('a','jason oscar aaa')
print(res) #查找出所有a,处理成迭代器对象。
for i in res: #通过for循环或者双下next取值
print(i)
----------执行结果------------
< callable_iterator object at 0x0000016217978760 >
<re.Match object; span=(1, 2), match='a'>
<re.Match object; span=(9, 10), match='a'>
<re.Match object; span=(12, 13), match='a'>
<re.Match object; span=(13, 14), match='a'>
<re.Match object; span=(14, 15), match='a'>
-----------------re.search练习-----------------------------------
import re
res = re.search('a','jason oscar aaa')
print(res) #匹配出一个便结束查找
----------[执行结果]------------
<re.Match object; span=(1, 2), match='a'>
-----------------re.match练习---------------------------------------
import re
res = re.match('a','jason oscar aaa')
print(res) #从头第一个匹配,没有就返回None 和正则^相似
----------[执行结果]------------
None
-------------------re.compile('a')--------------------------------------
import re
obj = re.compile('a')
print(re.findall(obj,'asjd2aaa1hj13123j'))
----------[执行结果]--------------------
['a', 'a', 'a', 'a'] #compile 能够提前准备好正则,之后可以反复使用减少代码冗余
re模块补充
--------------------1.不分组情况---------------------------------------------------
import re
res = re.findall('abc', 'abcabcabcabc') #正常过滤出abc字符
print(res)
-------执行结果------------------------
['abc', 'abc', 'abc', 'abc']
-------------------2.分组并优先展示情况-------------------------------------------------
res1 = re.findall('a(b)c','abcabcabcabc')
print(res1) #分组,用小括号将过滤数据分出来优先展示
-------执行结果------------------------
['b', 'b', 'b', 'b']
--------------------3.不分组情况---------------------------------------------------
import re
res = re.findall('a(?:b)c','abcabcabcabc')
print(res) #不分组,用小括号,括号内?:将过滤数据分出来优先展示
---------执行结果--------------------
['abc', 'abc', 'abc', 'abc']
---------------------4.起别名------------------------------------------------------
res = res.search('a(?P<id>b)(?P<name>c)','abcabcabcabc')
print(res.group()) #打印abc
print(res.group(2)) #索引形式
# print(res.group('id')) #将b的别名id
# print(res.group('name')) #c的别名为 name 定义别名 ?P<别名>
网络爬虫简介
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/
----------------【下载方式】-------------------------------------------
#多版本共存时。我一共安装了2.7和3.8所以做了环境区分
pip3.8 install 模块名 -i 源地址
#如果只有一个python解释器环境,执行以下即可/
pip install 模块名 -i 源地址
pycharm 提供第三方模块下载快捷方式
-
pip 和pip3的区别
- pip 是一个现代的,通用的 [Python](https://baike.baidu.com/item/Python) 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。
- 如果系统中只安装了Python2,那么就只能使用pip。
- 如果系统中只安装了Python3,那么既可以使用pip也可以使用pip3,二者是等价的。
- 如果系统中同时安装了Python2和Python3,则pip默认给Python2用,pip3指定给Python3用。
-
下载报错情况
1.pip工具版本过低 直接拷贝提示信息里面的更新命令即可
pip install --upgrade pip
2.网络波动 关键字是Read timed out
只需要重新下载几次即可 或者切换一个网络稳定一点的
## 3.有些模块在下载使用之前需要提前配置指定的环境
结合具体情况 百度搜索
-
解释器下载第三方模块图
- 下载第三方模块 requests
windos 键 +R 输入cmd命令 打开命
-
pycharm 安装第三方模块图
爬取公司信息
pip install requests
-
练习
# 朝目标地址发送网络请求获取响应数据(相当于在浏览器地址栏中输入网址并回车) ---------------------------不要一直请求某个网站---------------------------------------import requests import re 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) #保存到本地的静态html
--需求-统计所有的红牛页面所有的公司信息电话,地址等/。
import re #读取页面数据 with open(r'hn.html','r',encoding='utf-8') as f: data = f.read() #获取所有分公司的名称 company_name_list = re.findall('<h2>(.*?)</h2', data) company_email_list = re.findall("<p class='mailIco'>(.*?)</p>",data) company_add_list = re.findall("<p class='mapIco'>(.*?)</p>",data) company_phpone_list = re.findall("<p class='telIco'>(.*?)</p>",data) print(company_phpone_list) res1 = zip(company_name_list,company_add_list,company_phpone_list,company_email_list) for i in res1: print(""" 公司名称:%s 公司邮箱:%s 公司地址:%s 公司电话:%s """ %i) =====执行结果=========================== 公司名称:红牛杭州分公司 公司邮箱:杭州市上城xxx 公司地址:xxxxx 公司电话:xxxxx
openpyxl模块
作用:主要用于操作excel表格
也是pandas底层操作表格的模块
在python中能够操作excel表格的模块有很多
openpyxl属于近几年比较流行的模块
openpyxl针对03版本之前的excel文件兼容性不好
xlwt、xlrd也可以操作excel表格
兼容所有版本的excel文件 但是使用方式没有openpyxl简单
-
1.excel版本问题
03版本之前 excel文件的后缀名 .xls 03版本之后 excel文件的后缀名 .xlsx 如果是苹果电脑excel文件的后缀 .csv
-
利用openpyxl创建表格
from openpyxl import Workbook wb = Workbook() wb1 = wb.create_sheet('成绩表') wb2 = wb.create_sheet('财务表') wb3 = wb.create_sheet('校花表',0) wb44 = wb.create_sheet('八嘎') wb.title = '舔狗表' 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)' wb1['F11'] = '=sum(B5:B10)'