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

更新日期: 2021-11-30 阅读次数: 259 字数: 506 分类: Python

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

由于没有自动导出功能,于是我写了个 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")

爱评论不评论