python基础:第三方模块requests、openpyxl

一、爬虫小练习

# 思路
1.直接拷贝网友源代码数据保存到本地
2.在pycharm中读取文件当作字符串处理
3.编写正则表达式来筛选我们想要的内容
import re
# 1.文件操作读取文本内容
with open(r'redbull.html', 'r', encoding='utf8') as f:
# 2 直接读取全部内,将全部内容绑定变量名data
data = f.read()
# 3 研究各部分数据的特征,编写相应的正则表达式
# <h2>红牛杭州分公司</h2><p class='mapIco'>杭州市上城区庆春路29号远洋大厦11楼A座</p><p class='mailIco'>310009</p><p class='telIco'>0571-87045279/7792</p></li><li
"方法1:一次性获取每个公司全部的数据"
# res = re.findall(
# "<h2>(.*?)</h2><p class='mapIco'>(.*?)</p><p class='mailIco'>(.*?)</p><p class='telIco'>(.*?)</p></li><li", data)
#
# print(res)
"方法2:分步分挨个获取最后统一整合"
title_list = re.findall("<h2>(.*?)</h2>", data)
# print(title_list)
"""
['红牛杭州分公司', ... ,'红牛金丽衢代表处']
"""
address_list = re.findall("<p class='mapIco'>(.*?)</p>", data)
mail_list = re.findall("<p class='mailIco'>(.*?)</p>", data)
telephone_list = re.findall("<p class='telIco'>(.*?)</p>", data)
# 4 (处理信息)得到了公司名称、公司地址、公司邮编、公司电话这些信息的列表后,我们需要将其一一对应起来组合
res = zip(telephone_list, address_list, mail_list, telephone_list)
# print(list(res))
# [('0571-87045279/7792', '杭州市上城区庆春路29号远洋大厦11楼A座', '310009', '0571-87045279/7792')...]
# 5 将其写入txt文件中
with open(r'redbull.txt', 'w', encoding='utf8') as f:
# 6 添加for循环,可以格式化输出
for data_tuple in res:
print(
"""
公司名称:%s
公司地址:%s
公司邮编:%s
公司电话:%s
""" % data_tuple)
f.write(
"""
公司名称:%s
公司地址:%s
公司邮编:%s
公司电话:%s
""" % data_tuple)

二、第三方模块的下载与使用

第三方模块,大佬写的模块,功能很多

1.下载第三方模块的方式

# 我们如果想使用第三方模块,第一次必须先下载后面才可以反复使用
1.pip工具
注意每个解释器都有pip工具 如果我们的电脑上有多个版本的解释器那么我们在使用pip的时候一定要注意到底用的是哪一个 否则极其任意出现使用的是A版本解释器然后用B版本的pip下载模块
为了避免pip冲突 我们在使用的时候可以添加对应的版本号
python27 pip2.7
python36 pip3.6
python38 pip3.8
下载第三方模块的句式
pip install 模块名
下载第三方模块临时切换仓库
pip install 模块名 -i 仓库地址
下载第三方模块指定版本(不指定默认是最新版)
pip install 模块名==版本号 -i 仓库地址
2.pycharm提供快捷方式
image-20221026154541654

2.下载第三方模块可能会出现的问题

1.报错并有警告信息
WARNING: You are using pip version 20.2.1;
原因在于pip版本过低 只需要拷贝后面的命令执行更新操作即可
d:\python38\python.exe -m pip install --upgrade pip
更新完成后再次执行下载第三方模块的命令即可
2.报错并含有Timeout关键字
说明当前计算机网络不稳定 只需要换网或者重新执行几次即可
3.报错并没有关键字
面向百度搜索
pip下载XXX报错:拷贝错误信息
通常都是需要用户提前准备好一些环境才可以顺利下载
4.下载速度很慢
pip默认下载的仓库地址是国外的 python.org
我们可以切换下载的地址为国内的地址
# 命令行操作
pip 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/"""
image-20221026162047439

三、网络爬虫模块之requests模块

1.简介

requests模块能够模拟浏览器发送网络请求
# Python 内置了 requests 模块,该模块主要用来发 送 HTTP 请求
1.requests模块的语法
# 1 导入 requests 包
import requests
# 2 发送请求
# 朝指定网址发送请求获取页面数据(等价于:浏览器地址栏输入网址回车访问)
x = requests.get('http://www.redbull.com.cn/about/branch')
# 3 返回网页内容
print(x.text) # 并非所有网站都是以utf8来进行字符编码的
2.requests模块语法的补充说明
# 1 获取bytes类型的网页数据(二进制)
print(x.content)
# 2 可以指定字符编号,已经获取bytes类型的网页数据(二进制)
x.encoding = 'utf8' # 指定编码
print(x.text) # 获取字符串类型的网页数据(默认按照utf8)

requests模块的其他属性和方法:

https://www.runoob.com/python3/python-requests.html

2.网络爬虫实战之爬取*家二手房数据

"""
思路:
1.通过requests模块模拟浏览器向链家网站发送请求
2.返回网页内容
3.研究网页上的内容,编写对应的正则表达式
4.筛选出结果写入文件中
"""
import requests
import re
# 链家网站:https://sh.lianjia.com/ershoufang/pudong/
# 1 通过requests模块获取链家网站的内容
web_lj = requests.get('https://sh.lianjia.com/ershoufang/pudong/')
# 2 返回内容
data = web_lj.text
# 3 通过正则表达式来匹配数据,匹配我们想要的结果
house_title_list = re.findall(
'data-is_focus="" data-sl="">(.*?)</a>',
data)
print(house_title_list)
house_position_list = re.findall('<a href=".*?" target="_blank" data-log_index=".*?" data-el="region">(.*?)</a>', data)
# print(house_position_list)
house_street_list = re.findall('- <a href=".*?" target="_blank">(.*?)</a>', data)
# print(house_street_list)
house_info_list = re.findall('<div class="houseInfo"><span class="houseIcon"></span>(.*?)</div>', data)
house_follow_list = re.findall('<div class="followInfo"><span class="starIcon"></span>(.*?)</div>', data)
house_total_price_list = re.findall(
'<div class="totalPrice totalPrice2"><i> </i><span class="">(.*?)</span><i>万</i></div>', data)
house_unit_price_list = re.findall(
'<div class="unitPrice" data-hid=".*?" data-rid=".*?" data-price=".*?"><span>(.*?)</span></div>', data)
house_data = zip(house_title_list, house_position_list, house_street_list, house_info_list, house_follow_list,
house_total_price_list, house_unit_price_list)
# 4 创建文件保存数据
with open(r'sec_hand_house.txt','w',encoding='utf8') as f:
for data in house_data:
print("""
房屋标题:%s
小区名称:%s
街道名称:%s
详细信息:%s
关注程度:%s
房屋总价:%s万元
房屋单价:%s
""" % data
)
f.write("""
房屋标题:%s
小区名称:%s
街道名称:%s
详细信息:%s
关注程度:%s
房屋总价:%s万元
房屋单价:%s
""" % data
)

四、自动化办公领域之openpyxl模块

1.openpyxl模块简介

1.excel文件的后缀名问题
2003版本之前后缀名为: .xls
2003版本之后后缀名为: .xlsx

2.操作excel表格的第三方模块
1)xlwt往表格中写入数据(兼容所有版本的excel文件)
2)wlrd从表格中读取数据(兼容所有版本的excel文件)
3)**openpyxl最近几年比较火热的操作excel表格的模块(对2003版本之前的兼容性较差 )

2.openpyxl操作

很多模块都会有官方文档,可以帮助我们了解如何使用该模块

Workbook

  • workbook 相当于一个 Excel 文件档,每个被创建和打开的 Excel 文件都是独立的 Workbook 对象
  • sheet Excel 文档中的表单,每个 Excel 文档至少需要一个 sheet
  • cell 单元格,是不可分割的基本数据存储单元
from openpyxl import Workbook
1.创建一个excel文件 `Workbook`关键字
wb = Workbook()
2.在一个excel文件内创建多个工作簿sheet `create_sheet`
wb1 = wb.create_sheet('宿舍名单')
wb2 = wb.create_sheet('身份证信息')
wb3 = wb.create_sheet('电话信息')
3.修改默认的工作簿位置
# 在想修改的工作簿添加索引参数
wb4 = wb.create_sheet('女朋友电话', 0)
4.二次修改工作簿名称 `工作簿名.title = '新命名'`
wb4.title = '男神电话'
wb4.sheet_properties.tabColor = "1072BA"
5.填写数据
1)wb4['A1'] = 'haha'
2)wb4.cell(row=3, column=1, value='jason')
3)类似表格的形式直接写入数据
wb4.append(['编号', '姓名', '年龄', '爱好']) # 表头字段
wb4.append([1, 'jason', 18, 'read'])
wb4.append([2, 'kevin', 28, 'music'])
wb4.append([3, 'tony', 58, 'play'])
wb4.append([4, 'oscar', 38, 'ball'])
wb4.append([5, 'jerry', 'ball'])
wb4.append([6, 'tom', 88,'ball','哈哈哈'])
6.填写数据额公式
# 默认是公式本身,不会出现结果,需要用value参数指定才会获取计算结果
wb4['A5'] = '=sum(A1:A4)'
wb4.cell(row=8, column=3, value='=sum(A1:A4)')
7.保存excel文件
wb.save(r'aaaa.xlsx')

excel软件正常可以打开操作的数据集数量在10万左右

一旦数据集过大,软件操作几乎无效需要使用pandas模块进行代码操作

  • 模块openpyxl 主要用于数据的写入

  • 模块pandas 擅长表单操作

posted @   Duosg  阅读(180)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示