系列文章目录
- python开发低代码数据可视化大屏:pandas.read_excel读取表格
- python实现直接读取excle数据实现的百度地图标注
- python数据可视化开发(1):Matplotlib库基础知识
- python数据可视化开发(2):pandas读取Excel的数据格式处理
- python数据可视化开发(3):使用psutil和socket模块获取电脑系统信息(Mac地址、IP地址、主机名、系统用户、硬盘、CPU、内存、网络)
前言
本案例是爬虫的实战案例开发,通过requests模块爬取指定网站的pdf文档并分类保存到本地的操作。
一、项目需求
- 指定网址的pdf文档,通过提供的API进行读取,并按照指定的字段进行分类保存到本地;
- 文件命名规则:文件名.pdf
二、项目开发
1.引入库
代码如下(示例):
import requests
import time
import io
import os
2.创建目录
代码如下(示例):
def check_dir(dir_name):
# 创建目录
if not os.path.exists(dir_name):
os.makedirs(dir_name)
# 返回目录名称
return dir_name
3.保存PDF封装函数
- dir_name, 指定目录;
- pro_name,文件名称;
- pro_id, 通过指定的项目id读取对应的pdf资源;
- pro_types,项目类型;
# 读取对应的PDF文件
def get_pdf(dir_name, pro_name, pro_id, pro_types):
send_headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36",
"Connection": "keep-alive",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.8"}
url_file = 'http://test.com?m=Surveyor&a=surveyorDetail&act=preview&pro_id={}&pro_types={}'.format(pro_id, pro_types)
req = requests.get(url_file, headers=send_headers) # 通过访问互联网得到文件内容
bytes_io = io.BytesIO(req.content) # 转换为字节流
with open(r'{}/{}.pdf'.format(dir_name, pro_name), 'wb') as file:
file.write(bytes_io.getvalue()) # 保存到本地
print('{}已保存...'.format(pro_name))
# 延迟2秒
time.sleep(2)
time.sleep(2)
,在开发爬虫时,建议做好爬取时间的限制,防止过度占用宽带。
4.核心代码
domain_url = 'http://test.com/api/api.php?act=getAllProject&token=3cab7ce4142608c0f40c785b5ab5ca24'
re = requests.get(url=domain_url)
# print(re.status_code)
if re.status_code == 200:
print("已对接API...")
r = re.json()
# print(type(r['data']))
for item in r['data']:
# 自动生成对应的目录
if item['pro_audit'] == '2':
save_dir = check_dir('city')
elif item['pro_audit'] == '3':
save_dir = check_dir('county')
elif item['pro_audit'] == '4':
save_dir = check_dir('province')
elif item['pro_audit'] == '5':
save_dir = check_dir('complete')
# print(save_dir)
# 遍历文件
get_pdf(save_dir, item['pro_name'], item['pro_id'], item['pro_types'])
else:
print("无法获取API数据")
@漏刻有时
转载:https://blog.csdn.net/weixin_41290949/article/details/128916652
查看评论