小言_互联网的博客

python数据可视化开发(4):爬取对应地址的pdf文档并分类保存到本地文件夹(爬虫)

276人阅读  评论(0)

系列文章目录

  1. python开发低代码数据可视化大屏:pandas.read_excel读取表格
  2. python实现直接读取excle数据实现的百度地图标注
  3. python数据可视化开发(1):Matplotlib库基础知识
  4. python数据可视化开发(2):pandas读取Excel的数据格式处理
  5. 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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场