• 目录

    • re模块

    • 第三方模块

    • 网络爬虫

  • re模块

   1.简介:通过正则表达式匹配符合条件的字符串

   2.函数:

    2.1 findall函数:从全部数据文本中匹配符合条件的字符(匹配全部符合条件的数据) 

import re
l1 = 'this feeling makes people feel weightless'
res = re.findall('e', l1)
print(res)    # ['e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e']

    2.2 finditer函数:从全部数据文本中匹配符合条件的,结果是迭代器,为了节省内存,调用__next__查看数据(与findall作用一致)

import re
l1 = 'this feeling makes people feel weightless'
res1 = re.finditer('e', l1)
print(res1)   # <callable_iterator object at 0x000002B9312505C8>
print(res1.__next__().group())   # e   group()可以查看数据

    2.3 search函数:从全部数据文本中从左到右匹配符合条件的数据,遇到符合的第一个就结束(匹配符合条件的数据一次)   

import re
l1 = 'this feeling makes people feel weightless'
res = re.search('e', l1)
print(res.group())      # <re.Match object; span=(6, 7), match='e'> 加group后 e

    2.4 match函数:从全部数据文本中从左匹配符合条件的数据,若开头不符合条件则返回None(匹配开头数据不符合结束)

import re
l1 = 'this feeling makes people feel weightless'
res = re.match('e', l1)
print(res)        # None

    2.5 compile函数:可以先将正则表达式封装,之后就可以反复使用,若正则表达式比较复杂,可以减轻代码量(配合其他函数使用)

import re
l1 = 'this feeling makes people feel weightless'
res = re.compile('e')
res1 = re.findall(res, l1)
res2 = re.search(res, l1)
print(res1)            # ['e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e']
print(res2.group())    # e

    2.6 () 分组:

     2.6.1 搭配findall函数,将正则表达式的数据进行分组,会先将()分组中的数据展示出来,若要全部展示则在括号中正则表达式之前添加(?:)

import re
l1 = 'this feeling makes people feel weightless'
res = re.findall('e(l)i', l1)
print(res)      # ['l']
res1 = re.findall('e(?:l)i', l1)
print(res1)     # ['eli']

     2.6.2 搭配search函数,group() 同group(0)就是匹配正则表达式整体结果,group(1) 列出第一个括号匹配部分

import re
l1 = 'this feeling makes people feel weightless'
res = re.search('e(l)i', l1)
print(res.group())     # eli
print(res.group(0))    # eli
print(res.group(1))    # l

    2.6.3 对分组中的数据起名(?P<名字>正则表达式) :搭配search函数

import re
l1 = 'this feeling makes people feel weightless'
res = re.search('e(?P<l2>l)i', l1)
print(res.group('l2'))      # l
print(res.group())          # eli
  • 第三方模块

   1. 简介:别人编写好的,通过网络下载后才可以使用

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

   3. 下载命令:pip3.8 install 模块名

   4.切换下载源地址(默认地址是国外库,解决下载慢的原因)

    清华大学 :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/

    4.1 pyCharm中

   5.下载报错

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

     python38 -m pip install --upgrade pip

    5.2.网络波动 关键字是Read timed out

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

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

   6.模块也有版本

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

   7.openpyxl模块

    7.1 应用:对excel编辑的第三方模块

    7.2 openpyxl模块的三大组件:工作簿、工作表、单元格

    7.3 操作:

      表格创建:wb = Workbook()

      sheet命名及新建:wb1 = wb.create_sheet('成绩统计表', 0)

      数据三种写入方式:wb1.append(['姓名', '成绩'])、wb1['A4'] = '合计'、wb1.cell(row=4, column=2, value='=sum(B2:B3)')

      sheet重命名:wb1.title = '统计表'

      excel表格复制:wb = load_workbook(filename='111.xlsx')

from openpyxl import Workbook
wb = Workbook()
wb.save(r'111.xlsx')
wb1 = wb.create_sheet('成绩统计表', 0)
wb1.append(['姓名', '成绩'])
wb1.append(['张三', 99])
wb1.append(['李四', 95])
wb1['A4'] = '合计'
wb1.cell(row=4, column=2, value='=sum(B2:B3)')
wb1.title = '统计表'
wb.save(r'111.xlsx')

from openpyxl import load_workbook
wb = load_workbook(filename='111.xlsx')
wb.save(r'成绩统计表.xlsx') 
  • 网络爬虫

   1.互联网定义:又称国际网络,指的是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络

   2.互联网的目的:信息共享

   3.上网的本质:信息共享并访问别人计算机上的信息

   4.网络爬虫的目的:

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

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

   5.操作:

import requests

# 朝目标地址发送网络请求获取响应数据(相当于在浏览器地址栏中输入网址并回车)
 res = requests.get('http://www.redbull.com.cn/about/branch')
 print(res.content)  # 获取bytes类型的数据
 print(res.text)     # 获取解码之后的数据# 为了避免每次执行程序都要发送网络请求  也可以提前保存页面数据到文件 style="color: #008000;">
 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)

 

 

 posted on 2022-07-20 21:06  拾荒菇凉  阅读(106)  评论(0)    收藏  举报