re模块,第三方模块,网络爬虫简介。openpyxl模块

  • re模块

   · re模块补充说明

  • 第三方模块
  • 网络爬虫简介
  • 爬取公司信息

  • openpyxl模块

 


 

1.re模块

  re模块也是python中的内置方法之一,在python想使用正则必须借助于模块 re

定义:re模块称为正则表达式;

作用:创建一个"规则表达式",用于验证和查找符合规则的文本,广泛用于各种搜索引擎、账户密码的验证等;

1.1  re.findall()

    findall通过正则表达式筛选出文本中所有符合条件的数据,同时最后得到的是一个列表

    用法:re.findall('待查找的参数',‘提供的数据’)

import re
res = re.findall('s', 'sswwadfazssfessss') print(res) #得到['s', 's', 's', 's', 's', 's', 's', 's']列表

 

1.2  re.finditer()

    finditer与findall作用一致 只不过结果会被处理成迭代器对象 用于节省内存,想要用的话用__next__就行了

    用法:re.finditer('待查找的参数',‘提供的数据’)

import re
res = re.finditer('s', 'sswwadfazssfessss')
print(res)  # <callable_iterator object at 0chaix0000020F28196B50>
res1 = res.__next__().group()  
print(res1)     # s

 

1.3  re.search()

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

    用法:re.search('待查找的参数',‘提供的数据’)

res = re.search('s', 'sswwadfazssfessss')
print(res)  # <re.Match object; span=(1, 2), match='a'>
print(res.group())  # s

 

1.4  re.match()

    match通过正则表达式从头开始匹配  如果头部已经不符合 那么后面不走了

    用法:re.match('待查找的参数',‘提供的数据’)

res = re.match('s', 'sswwadfazssfessss').group()
print(res)      # s


res1 = re.match('s', 'lllswwadfazssfessss')
print(res1)     # None

1.5  compile()

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

    使用 compile :

import re
some_text = 'a,b,,,,c d'
reObj = re.compile('[, ]+')
res = reObj.split(some_text)
print(res)     # ['a', 'b', 'c', 'd']

    不使用 compile :

import re
some_text = 'a,b,,,,c d'
res = re.split('[, ]+',some_text)
print(res)                  # ['a', 'b', 'c', 'd']

re模块补充说明:

1.分组(用()的方式括住一个你想括的,然后他最后输出的就会是和括号里相匹配的)

import re
res = re.findall('abc','abcabcabcabc')
findall针对分组的正则表达式匹配到的结果 优先展示
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')
findall也能够取消分组优先展示 (?:)
print(res)#['abc', 'abc', 'abc', 'abc'] res = re.search('a(b)c','abcabcabcabc') print(res.group()) # abc print(res.group(0)) # abc print(res.group(1)) # b

 

2.起别名(就是给要查找的值相当于变量名,方便以后查找)

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

 

2. 第三方模块

第三方模块是需要我们手动下载的

1.第三方模块必须先下载才可以导入使用
2.python下载第三方模块需要借助于pip工具
3.cmd解释器下载命令:

          pip3.8 install 模块名

但是在下载的过程中我们也会遇到一些问题:

1. 下载速度很慢,报错:   

      因为pip工具默认是从国外的仓库地址下载模块,所以速度很慢

  so, 我们可以切换下载地址 :

  清华大学 :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 源地址

 

 

运行e:\python38\python.exe -m pip install --upgrade pip这段代码后:

 

 

 同时在Pycharm中我们也可以下载第三方模块:

先打开File里的setting,在选择project中的Python Interpreter然后按照下图输入你想下载的模块点击Install Packge

 

 

 

但是我们在下载的时候pycharm下载第三方模块网速过慢,下面是解决策略:

先打开File里的setting,在选择project中的Python Interpreter最后再按照下面的操作即可

 

 

 

 

 

 

 总结:

1.下载速度很慢
    切换下载的地址(源地址)
        清华大学 :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.下载报错
    1.pip工具版本过低 直接拷贝提示信息里面的更新命令即可
        python38 -m pip install --upgrade pip
    2.网络波动 关键字是Read timed out
        只需要重新下载几次即可 或者切换一个网络稳定一点的
    3.有些模块在下载使用之前需要提前配置指定的环境
        结合具体情况 百度搜索
    
3.模块也有版本
    pip3.8 install 模块名==版本号
        pip3.8 install django==1.11.11

 

3.网络爬虫简介

  1. 网络爬虫会模拟人使用浏览器,上网自动抓取互联网中数据。

  2.它是一种按照一定规则从互联网中获取网页内容的程序或者脚本。

  3.爬虫的应用:数据分析(采集有价值的数据,过滤掉那些无效的数据)

  

互联网发明的目的是什么
    将接入互联网的计算机上面的数据彼此共享
上网的本质是什么
    基于互联网访问别人计算机上面的资源(有些计算机存在的意义就是让别人访问,这种类型的计算机我们也称之为服务器)
网络爬虫的本质
    模拟计算机浏览器朝目标网址发送请求回去数据并筛选
    只要是浏览器可以访问到的数据网络爬虫理论上都可以

4.爬取公司信息

爬取红牛官网http://www.redbull.com.cn/about/branch

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)

  最后呈现这样的效果

 

 

 

 


 

5.openpyxl模块

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

          pandas:

              Pandas 是一个开源的第三方 Python 库,从 Numpy 和 Matplotlib 的基础上构建而来,享有数据分析“三剑客之一”的盛名(NumPy、Matplotlib、Pandas)。Pandas 已经成为               Python 数据分析的必备高级工具,它的目标是成为强大、灵活、可以支持任何编程语言的数据分析工具。

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

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

1.excel版本问题
  03版本之前 excel文件的后缀名 .xls
  03版本之后 excel文件的后缀名 .xlsx
  如果是苹果电脑excel文件的后缀 .csv
2.下载模块
  pip3.8 install openpyxl

下面将演示openpyxl模块具体操作:

1.创建一个三头牛的excel表格

# 创建excel文件
import re
from openpyxl import Workbook

# 创建一个excel文件
nb = Workbook()
# 创建三个表单(牛大,牛儿,牛三)
nb1 = nb.create_sheet('牛大')
nb2 = nb.create_sheet('牛儿')
nb3 = nb.create_sheet('牛三', 0)# 0的意思是位于三个表单的第一个

#nb1.title = '牛头'  #可以改名字
#nb1.sheet_properties.tabColor = "1072BA"  # 修改工作簿颜色


nb.save(r'三头牛.xlsx')  # 保存文件

运行之后会是这个样子

      

 

 2.写入数据

 对上述的三头牛表继续操作

# 第一种写入方式  
nb1['A1'] = '我是牛大里的A1'
nb1['c4'] = '我是牛大里的C4'
nb.save(r'三头牛.xlsx') # 保存文件
 

 

 

 

#第二种写入方式
nb2.cell(row=3,column=8, value='我是牛二绝对定位')
nb.save(r'三头牛.xlsx')  # 保存文件

 

 

# 第三种写入方式(批量写入)
nb3.append(['username', 'password', 'age', 'gender', 'hobby'])
nb3.append(['牛三1', 123, 18, '野生的', 'read'])
nb3.append(['牛三1', 123, 18, '野生的', 'read'])
nb3.append(['牛三1', 123, 18, '野生的', 'read'])
nb3.append(['牛三1', 123, 18, '野生的', 'read'])
# 如果有数据缺失最好自己补一个nono或者''
nb3.append(['牛三1', 123, 18, '野生的', None])
nb3.append([None, 123, 18, '野生的', ''])
nb.save(r'三头牛.xlsx')  # 保存文件

 

posted @ 2022-07-20 21:02  没错,干就完了!  阅读(332)  评论(0)    收藏  举报