使用 python 将网站上多页表格数据导出 Excel 文件

文章目录

    公司找外包公司做了个大学生创新大赛作品上传及报名系统,但是离谱的是,活动结束后外包公司就把服务器关停了。参数数据及作品文件都无法下载。于是协商这个公司把服务器启动两天,等我们下载完了,再关停。

    由于没有自动导出功能,于是我写了个 python 程序做了自动下载。

    处理逻辑

    • [x] 在浏览器中,抓取数据请求。调整参数,一次性获取所有数据的 json 格式
    • [x] json 数据保存到本地文件
    • [x] python 读取 json 文件,参照网站上的字段顺序进行解析。并保存成 csv 文件
    • [x] 使用 wps 新建 Excel 表格文件,通过数据导入功能,将 csv 文件导入。注意设置分隔符,字段类型。可以规避身份证数据被展示成科学计数法
    • [x] 文件保存
    • [x] 用 python 拼接出文件下载链接,再构造成 curl 命令。批量写入本地 shell 文件
    • [x] 执行 shell 文件进行 pdf,视频文件的批量下载
    • [x] 文件名中的斜杠需要剔除
    • [x] 不同文件类型独立目录

    curl 自定义下载文件名

    curl -L "http://www.sunzhongwei.com/download.do?fileCode=60abb8cea8d3fd5b1398b7a5" --output "python入门.pdf"
    

    python 解析 json 导出 csv 示例

    #!/usr/bin/env python3
    
    import json
    import csv
    
    if '__main__' == __name__:
        print("Hello world!")
    
        rows = []
        with open('student.json') as f:
            data = json.load(f)
            items = data["data"]
            for item in items:
                rows.append([
                    item["student_name"],
                    item["student_grade"],
                    item["student_mobile"],
                    item["student_email"],
                    "队长" if item["is_team_leader"] else "",
                ])
        print(rows)
    
        with open("student.csv", 'w', newline='') as myfile:
            wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
            for row in rows:
                wr.writerow(row)
    

    python 生成批量下载文件 shell 示例

    #!/usr/bin/env python3
    
    import json
    import csv
    
    
    if '__main__' == __name__:
        print("Hello world!")
    
        rows = []
        with open('product.json') as f:
            data = json.load(f)
            items = data["data"]
            commands = []
            for item in items:
                fileCode = item["filecode"]
                if fileCode:
                    command = 'curl -L "http://www.sunzhongwei.com/download.do?fileCode=' + fileCode + '" --output "' + fileCode + '_' + item["filename"].replace("/", "") + '.pdf"'
                    commands.append(command)
    
        with open('product_ips.sh', 'a') as the_file:
            for command in commands:
                the_file.write(command + "\n")
    

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式