学习Python-Day24


今日学习内容

一、re模块常见的方法

在python中如果想要使用表达式 热模块是选择之一

import re

1.findall
    'findally 通过正则表达式筛选出文本中所有符合条件的数据。'
    res = re.findall('x', 'xcc xh xzhwyb ywszd xxx')
    print(res)  #['x', 'x', 'x', 'x', 'x', 'x']



2.finditer
    '针对文本或者数据过多用迭代器对象去解决,可以用 __next__获取数据。'
    'finditer 与 findall 作用一致,只不过结果会被处理成迭代器对象,用于节省内存。'

    res = re.finditer('x', 'xcc xh xzhwyb ywszd x')
    print(res)  #
    print(res.__next__()) 
    print(res.__next__())
    print(res.__next__())
    print(res.__next__())
    '运行结果:
        
        
        
        
        '

3.search
    'search通过正则表达式匹配到一个符合条件的内容就结束'
    res = re.search('x', 'cc xh xzhwyb ywszd x')
    print(res) 
    '运行结果:
        '


4.match
    'match通过正则表达式从头开始匹配,如果头部已经不符合,那么后面结束了。'
    res = re.match('x', 'cc xh xzhwyb ywszd x')
    print(res)  # None

    res1 = re.match('x', 'xcc xh xzhwyb ywszd x')
    print(res1)  # 


5.compile
    'compile能够提前准备好正则,之后可以反复使用,减少代码冗余'
    obj = re.compile('x')
    print(re.findall(obj, 'xcc xh xzhwyb ywszd xx'))
    print(re.findall(obj, 'c xh xzhwyb ywszd xx'))
    print(re.findall(obj, 'xsdwsieuxh'))
    '运行结果:
        ['x', 'x', 'x', 'x', 'x']
        ['x', 'x', 'x', 'x']
        ['x', 'x']'

二、re模块补充说明

1.分组  ()

   1.1 findall针对分组的正则表达式匹配到的结果 优先展示
        res = re.findall('wyb', 'wybaixzwybaixz')
        print(res)  # ['wyb', 'wyb']
        res = re.findall('w(y)b', 'wybaixzwybaixz')
        print(res)  #['y', 'y']
    
    1.2 findall也能够取消分组优先展示 (?:)
        res = re.findall('w(?:y)b', 'wybaixzwybaixz')
        print(res)  #['wyb', 'wyb']
    1.3 search 针对分组的正则表达式没有优先展示,
    但是可以用索引的方式拿出指定的数值。
    	res = re.search('w(y)b', 'wybaixzwybaixz')
        print(res.group())
        print(res.group(0))
        print(res.group(1))
      '运行结果:
            wyb
            wyb
            y'
2.别名
    res = re.search('w(?Py)(?Pb)', 'wybaixzwybaixz')
    print(res.group())
    print(res.group(1))
    print(res.group('id'))
    print(res.group('name'))
'运行结果:
    wyb
    y
    y
    b'

三、网络爬虫简介

  1. 什么是互联网

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

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

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

  3. 上网的本质是什么

    基于互联网访问别人计算机上面的资源。

    有些计算机的存在的意义就是让别人访问,这种类型的计算机我们也称之为服务器

  4. 网络爬虫的本质

    模拟计算机浏览器潮目标网址发送请求回去数据并筛选。

    只要浏览器可以访问到的数据网络爬虫理论上都可以。

  5. 获取红牛分公司数据

    http://www.redbull.com.cn/about/branch

四、第三方模块下载

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

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

  3. 下载命令

    pip3.8 install 模块名

    1.下载速度很慢
    	1.1pip工具默认是从国外的仓库地址下载的模块,下载速度会很慢。
        我们可以切换下载的地址(源地址)
    		清华大学 :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/
                
     	1.2 pip3.8 install 模块名 -i 源地址
        
     	1.3 pycharm 提供第三方模块下载快捷方式
        
     	1.4 直接修改python解释器源文件(课后自行查阅)
        	Windows :
     			找到python安装目录下:Libsite-packagespipmodelsindex.py文件,将PYPI的值改为你所需要的镜像源即可。
     			#PyPI = Index('https://pypi.python.org/')  
     			PyPI = Index('https://pypi.douban.com/') 
     	修改配置文件永久换源(Windows):
     			1.文件管理器文件路径地址栏敲:%APPDATA% 回车,快速进入 C:Users电脑用户AppDataRoaming 文件夹中.
     			2.新建 pip 文件夹并在文件夹中新建 pip.ini 配置文件.
     			3.新增 pip.ini 配置文件内容
     			[global]
     			index-url = http://pypi.douban.com/simple
     			[install]
     			use-mirrors =true
     			mirrors =http://pypi.douban.com/simple/
     			trusted-host =pypi.douban.com
        	 
        
    2.下载报错
    	2.1 pip工具版本过低,直接拷贝提示信息里面的更新命令即可
        		python38 -m pip install --upgrade pip
        2.2 网络波动,关键字的 Read time out
        		只需要重新下载几次即可,或者切换一个网络稳定一点的。
        2.3 有些模块在下载使用前需要提前配置指定的环境
        		结合具体情况,百度搜索。
    3.模块也有版本
     	pip3.8 install 模块名==版本号
     	pip3.8 install django==1.11.11
        (切换版本号)
    
    

五、爬取分公司数据

import re
#读取页面数据
with open(r'hongniu.html', 'r', encoding='utf8') as f:
    data = f.read()
#研究目标数据的特征,编写正则筛选。
#1.获取所有公司的名称
name_list = re.findall('

(.*?)

', data) #print(name_list) #2.获取所有分公司地址 addr_list = re.findall("

(.*?)

", data) #print(addr_list) #3.获取所有分公司邮政编号 email_list = re.findall("

(.*?)

", data) #4.获取所有分公司电话 phone_list = re.findall("

(.*?)

", data) #5.以上获得的表格中数据按照位置整合 res = zip(name_list, addr_list, email_list, phone_list) #6.处理数据(展示 保存到excel) for i in res: print(""" 公司名称:%s 公司地址:%s 公司邮箱:%s 公司电话:%s """ % i)

六、excel文件简介

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

在python中能够操作excel表格的模块有很多

  • openpyxl属于近几年比较流行的模块,

    openpyxl针对03版本之前的excel文件兼容性不好。

  • xlwtxlrd也可以操作excel表格

    ? 兼容所有版本的excel文件,但是使用方式没有openpyxl简单。

  1. excel版本

    03版本前 文件后缀名 .xls

    03版本后 文件后缀名 .xlsx

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

  2. 下载模块

    pip3.8 install openpyxl

七、openpyxl实操

1.创建excel文件
wb = Workbook()

wb1 = wb.create_sheet('成绩表')
wb2 = wb.create_sheet('成员表')

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

2.写入数据
第一种写入方式:
wb1['A1'] = '肖战'
wb1['A3'] = '王一博'
wb1['B2'] = 'szd'

第二种写入方式:
wb1.cell(row=3, column=3, value='bjyx')

第三种写入方式(批量写入):
wb1.append(['username', 'password', 'age', 'gender', 'hobby'])
wb1.append(['肖战', 123, 30, 'male', 'sing'])
wb1.append(['王一博', 321, 24, 'male', 'dance'])
wb1.append(['刘诗诗', 222, 32, 'female', '哈哈哈'])
wb1.append(['xc', 123, 17, 'female', None])

可以进行就和的数学公式
wb1['C10'] = '=sum(C5:C8)'

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

作业

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

import re
from openpyxl import Workbook
#读取页面数据
with open(r'hongniu.html', 'r', encoding='utf8') as f:
    data = f.read()
#研究目标数据的特征,编写正则筛选。
#1.获取所有公司的名称
name_list = re.findall('

(.*?)

', data) #print(name_list) #2.获取所有分公司地址 addr_list = re.findall("

(.*?)

", data) #print(addr_list) #3.获取所有分公司邮政编号 email_list = re.findall("

(.*?)

", data) #4.获取所有分公司电话 phone_list = re.findall("

(.*?)

", data) #5.以上获得的表格中数据按照位置整合 res = zip(name_list, addr_list, email_list, phone_list) # #创建excel文件 wb = Workbook() #创建表 wb1 = wb.create_sheet('分公司信息表') #写入数据 wb1.append(['公司名称', '公司地址', '公司邮箱', '公司电话']) #6.处理数据(展示 保存到excel) for i in res: if i == '': i = None wb1.append(i) # print(""" # 公司名称:%s # 公司地址:%s # 公司邮箱:%s # 公司电话:%s # """ % i) wb.save(r'02.xlsx')