curl - 如何使用 curl 或 wget 以 csv 或 tsv 格式获取此网页的内容
问题描述
我有以下链接:
我想下载这个数据库中的所有表并转换成 csv 或 tsv 文件。是否有任何 curl 或 wget 命令可以让我解析这个数据库?
像这样的东西
wget -r -np -k http://fsop.caac.gov.cn/g145/CARS/WebSiteQueryServlet\?method\=loadAircraftConditionsResultPage\&enterpriseName\=%E6%AD%A6%E6%B1%89%E8%88%AA%E8%BE%BE%E8%88%AA%E7%A9%BA%E7%A7%91%E6%8A%80%E5%8F%91%E5%B1%95%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8\&licenceCode\=\&partsNumber\=\&partsName\=\&ataChaptersection\=
只给我网站代码而不是表格本身的内容。
解决方案
如果你想要一个 json 输出,那么 URL 是
http://fsop.caac.gov.cn/g145/CARS/WebSiteQueryServlet?method=aircraftConditionsQuery&iColumns=10&sColumns=&iDisplayStart=0&iDisplayLength=20&mDataProp_0=enterpriseName&mDataProp_1=licenceCode&mDataProp_2=partsNumber&mDataProp_3=partsName&mDataProp_4=ataChaptersection&mDataProp_5=manufacturers&mDataProp_6=6&mDataProp_7=fileToAccord&mDataProp_8=mainDevices&mDataProp_9=remark&enterpriseName=%E6%AD%A6%E6%B1%89%E8%88%AA%E8%BE%BE%E8%88%AA%E7%A9%BA%E7%A7%91%E6%8A%80%E5%8F%91%E5%B1%95%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&licenceCode=&partsNumber=&partsName=&ataChaptersection=
在 URL 中,您在iDisplayStart
参数中有分页,从 0 开始,有 20 个结果步骤。
使用 gnu parallel、jq 和Miller,您可以下载所有内容并转换为 CSV。
例如要下载前 6 个 json 输出(从 0 到 100),您可以运行
echo {0..100..20} | tr " " "\n" | parallel -j0 'curl "http://fsop.caac.gov.cn/g145/CARS/WebSiteQueryServlet?method=aircraftConditionsQuery&iColumns=10&sColumns=&iDisplayStart={}&iDisplayLength=20&mDataProp_0=enterpriseName&mDataProp_1=licenceCode&mDataProp_2=partsNumber&mDataProp_3=partsName&mDataProp_4=ataChaptersection&mDataProp_5=manufacturers&mDataProp_6=6&mDataProp_7=fileToAccord&mDataProp_8=mainDevices&mDataProp_9=remark&enterpriseName=%E6%AD%A6%E6%B1%89%E8%88%AA%E8%BE%BE%E8%88%AA%E7%A9%BA%E7%A7%91%E6%8A%80%E5%8F%91%E5%B1%95%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&licenceCode=&partsNumber=&partsName=&ataChaptersection=" | jq -c '"'"'.aaData[]'"'"' >{}.jsonl'
在输出中,您将有 6 个 json 文件。
要将它们合并到 CSV 中,您可以运行
mlr --j2c unsparsify *.jsonl >output.csv
这将类似于https://gist.github.com/aborruso/777fce957865011c85a7a689cd0bd413
推荐阅读
- cloud - 哪个云支持同一实例上灵活的 CPU/内存升级和降级?
- linux - 为什么虚拟地址空间中存在多个 libc 和 ld 条目
- python - 编写此 lambda 函数的更有效方法
- angular - Angular - core.js:6456 错误类型错误:无法设置未定义的属性(设置'first_name')
- javascript - 如何在数据表中的列上创建条件?
- three.js - 为什么画布高度很大时,原点偏移了?
- sql - 如果有多个值,如何选择非空值
- html - 将 Flex 列中的文本水平居中
- javascript - 如何禁用条带分配
- python - Python 中的 Zipf 分布