今日内容回顾(模块及第三方模块的下载)

re模块

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

  • re.findall

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

    res = re.findall('a', 'jason oscar aaa')
    print(res)  # ['a', 'a', 'a', 'a', 'a']  列表
    
  • re.finditer

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

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

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

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

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

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

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

    obj = re.compile('a')
    print(re.findall(obj,'asjd21hj13123j'))
    print(re.findall(obj,'fdh3jh45jhqjha'))
    print(re.findall(obj,'asdasdadadasda'))
    
  • 分组

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

      res = re.findall('abc','abcabcabcabc')
      print(res)  # ['abc', 'abc', 'abc', 'abc']
      res = re.findall('a(b)c','abcabcabcabc'
      print(res)  # ['b', 'b', 'b', 'b']
      
    2. 使用(?:)也能够取消分组优先展示。

      res = re.findall('a(?:b)c','abcabcabcabc')
       print(res)
      
  • 别名

    可以在括号内?p+别名的方式给其取别名便于调用

    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'))
    

网络爬虫简介

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

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

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

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

  • 网络爬虫的本质

    模拟计算机浏览器朝目标网址发送请求爬取所需的数据回去并筛选。

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

第三方模块的下载

  • 首先需要使用到python解释器中的pip工具

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

    2. 借助于pip工具将第三方模块下载好

    3. 下载命令

      操作系统中cmd命令下下载,输入: pip3.8 install 模块名

  • 下载报错

    1. pip工具版本过低,直接拷贝信息提示里面的更新命令即可

      python38 -m pip install --upgrade pip

    2. 网络波动报错,在最底层有个关键字 Read timed out

      只需要重新下载几次即可 或者切换一个网络稳定一点的

    3. 有些模块在下载使用之前需要提前配置好指定的环境

      结合具体情况,百度搜索。

  • 模块也有版本

    pip3.8 install 模块名 ==版本号

    列如:pip3.8 install django == 1.11.11

  • 下载速度慢

    pip工具默认是从国外的第三方模块仓库下载模块,速度很慢

    我们可以切换下载的地址(源地址)

    pip3. 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/
    

    pip3. install 模块名 -i (源地址,国内的下载地址)

    pycharm提供第三方模块下载快捷方式

    在pycharm中使用快捷键 Ctrl+Alt+S 打开设置窗口

    找到project:文件名,在点击python interpreter 找到pip点击进去

在下方输入需要下载的模块名点击左下角install package下载即可,

也可在右下方specify version勾选,选着对应支持的模块版本下载。

爬取所需数据

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第三方模块

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

在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

openoyxl实操

  1. 创建excel文件

    1.创建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"  # 修改工作簿颜色
    
        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)'
    
posted @ 2022-07-20 17:04  瓮小辉  阅读(78)  评论(0)    收藏  举报