网络爬虫之requests模块,自动办公领域之openpyx模块
阅读原文时间:2023年07月09日阅读: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提供快捷方式

注意:下载第三方模块可能会出现的问题

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 仓库地址
   pip的仓库地址有很多 百度查询即可
   清华大学 :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/

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

requests模块能够模拟浏览器发送网络请求

导入模块: import requests

1. 朝指定网址发送请求获取页面数据(等价于:浏览器地址栏输入网址回车访问)

res = requests.get('http://www.redbull.com.cn/about/branch')

print(res.content) # 获取bytes类型的网页数据(二进制)

res.encoding = 'utf8' # 指定编码
print(res.text) # 获取字符串类型的网页数据(默认按照utf8)

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

import re
import requests

res = requests.get('https://sh.lianjia.com/ershoufang/pudong/tt9/')
data = res.text

home_name_list = re.findall('(.*?) ',data)
home_street_list = re.findall('

',data)
home_info_list = re.findall('
(.*?)
',data)
home_attention_list = re.findall('
(.*?)
',data)
home_unite_price = re.findall('
(.*?)
',data)

home_data = zip(home_name_list,home_street_list,home_info_list,home_attention_list,home_unite_price)

with open(r'home_data.txt', 'w',encoding='utf8') as f:

for data in home\_data:

    print("""  
    1.房屋名称 : %s  
    2.房屋街道 : %s  
    3.房屋详情 : %s  
    4.房屋关注度 : %s  
    5.房屋价格 : %s  
    """ % data)

    f.write("""  
    1.房屋名称 : %s  
    2.房屋街道 : %s  
    3.房屋详情 : %s  
    4.房屋关注度 : %s  
    5.房屋价格 : %s  
    """ % data)

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

  • excel文件的后缀名问题

03版本之前        .xls

03版本之后        .xlsx

  • 操作excel表格的第三方模块

xlwt:往表格中写入数据、xlrd:从表格中读取数据:兼容所有版本的excel文件

openpyxl:最近几年比较火热的操作excel表格的模块
                           03版本之前的兼容性较差

pandas:涵盖了上述的模块

openpyxl操作

1.  创建文件与修改文件名称

Workbook() —创建 excel 文件

from openpyxl import Workbook

wb = Workbook() # 创建了一个excle表格

wb.save(r'客户信息表.xlsx') # 保存之后表格才会出现

双击打开如图:

在一个excel文件内创建多个工作簿(注意必须把之前创建的表格关掉之后才可以操作,不然会报错)

from openpyxl import Workbook

wb = Workbook()
wb1 = wb.create_sheet('客户名单1')
wb2 = wb.create_sheet('客户名单2')
wb3 = wb.create_sheet('客户名单3')

wb.save(r'客户信息表.xlsx')

双击打开如图:

还可以修改默认的工作簿位置

from openpyxl import Workbook

wb = Workbook()
wb1 = wb.create_sheet('客户名单1')
wb2 = wb.create_sheet('客户名单2')
wb3 = wb.create_sheet('客户名单3')
wb4 = wb.create_sheet('VIP客户', 0) # 参数0表示的是工作薄位置

wb.save(r'客户信息表.xlsx')

二次修改工作薄名称

from openpyxl import Workbook

wb = Workbook()
wb1 = wb.create_sheet('客户名单1')
wb2 = wb.create_sheet('客户名单2')
wb3 = wb.create_sheet('客户名单3')
wb4 = wb.create_sheet('VIP客户', 0)

wb4.title = '长期客户' # 将‘VIP客户’修改为‘长期客户’

wb.save(r'客户信息表.xlsx')

2. 填写数据

填写数据的方式1:Worksheet[ ]

from openpyxl import Workbook

wb = Workbook() # 创建了一个excle表格
wb1 = wb.create_sheet('客户名单1')
wb1['A1'] = 666 # ['A1'] 代表的是该表中的 A1 位置,我们可以将数据直接赋值给它

wb.save(r'客户信息表.xlsx')

填写数据的方式2:Worksheet.cell()

from openpyxl import Workbook

wb = Workbook() # 创建了一个excle表格
wb1 = wb.create_sheet('客户名单1')
wb1.cell(row=3, column=1, value='Alex') # 在第3行第1列写入数据

wb.save(r'客户信息表.xlsx')

填写数据的方式3:Worksheet.append() 可以同时写入多个数据

from openpyxl import Workbook

wb = Workbook() # 创建了一个excle表格
wb1 = wb.create_sheet('客户名单1')

wb1.append(['编号', '姓名', '年龄', '爱好']) # 表头字段
wb1.append([1, 'jason', 18, 'read'])
wb1.append([2, 'kevin', 28, 'music'])
wb1.append([3, 'tony', 58, 'play'])
wb1.append([4, 'oscar', 38, 'ball'])

wb.save(r'客户信息表.xlsx')

3. 填写数学公式

wb1['A1'] = 12
wb1['A2'] = 15
wb1['A3'] = 23
wb1['A4'] = 35
wb1['A5'] = '= sum(A1:A4)' # 85

openpyx实战:

将前面爬取的房屋信息写入Excley文件:

import requests
res = requests.get('https://sh.lianjia.com/ershoufang/pudong/tt9/')
data = res.text

home_name_list = re.findall('(.*?) ',data)

home_street_list = re.findall('

',data)

home_info_list = re.findall('

(.*?)
',data)

home_attention_list = re.findall('

(.*?)
',data)

home_unite_price = re.findall('

(.*?)
',data)

home_data = zip(home_name_list,home_street_list,home_info_list,home_attention_list,home_unite_price)

from openpyxl import Workbook
wb = Workbook()
wb1 = wb.create_sheet('房屋信息', 0)
wb1.append(['房屋名称','房屋街道','房屋详情','房屋关注度','房屋价格'])
for data in home_data:
wb1.append(data)
wb.save(r'home_info.xlsx')

openpyxl主要用于数据的写入,至于后续的表单操作它并不是很擅长,如果想做需要更高级的模块pandas

4. openpyxl读取数据

from openpyxl import load_workbook

1.指定读取的文件

wb = load_workbook(r'客户信息表.xlsx')

2.查看内部所有工作簿名称

print(wb.sheetnames) # ['Sheet', '客户名单1']

3.指定某个工作簿

wb1 = wb['客户名单1']

4.读取工作簿相关操作

print(wb1.max_row) # 获取最大数据行数 5
print(wb1.max_column) # 获取最大数据列数 1
print(wb1['A1'].value) # 读取单元格内容 12
print(wb1['A5'].value) # 如果是公式 读取的公式 # = sum(A1:A4)

按行和列读取数据:

for i in wb1.rows:
print([d.value for d in i])

for j in wb1.columns:
print([d.value for d in j])