-
目录
-
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.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)