繁体   English   中英

无法使用 urllib 从网站下载 csv 文件,当使用参数发布请求时

[英]Can't download a csv file from a website using urllib, when post requests with parameters comes into play

我正在尝试使用 urllib package 从网页下载 csv 文件。 要从该站点下载 csv 文件,必须发送带有适当参数的发布请求。

当我尝试使用 requests 模块时,我可以完美地下载文件。 然而,当我尝试使用 urllib package 做同样的事情时,我也得到了一个 csv 文件,但这次文件只包含标题。 尸体不见了。

以下是从该站点手动下载该文件的方法:

Site address: https://www.nyiso.com/custom-reports?report=dam_lbmp_zonal
Zones: CAPITL, CENTRL
Version: Latest
Format: CSV
Hit `Generate Report` button

以下脚本仅下载 csv 文件中的标头:

import csv
import urllib.request
import urllib.parse

link = "http://dss.nyiso.com/dss_oasis/PublicReports"
params = {
    'reportKey': 'DAM_LBMP_ZONE',
    'startDate': '04/17/2021',
    'endDate': '04/17/2021',
    'version': 'L',
    'dataFormat': 'CSV',
    'filter': ['CAPITL','CENTRL'],
}

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
}
data = urllib.parse.urlencode(params).encode()
req = urllib.request.Request(link, data=data, headers=headers)
res = urllib.request.urlopen(req)
with open("output.csv","wb") as f:
    f.write(res.read())

如何使用 urllib package 从网站下载 csv 文件?

代码中的一个小修改,当您在过滤器参数中传递列表时,您需要在 urlencode 方法中传递doseq=True ,同时传递参数以正确编码数据。

请参阅下面的代码以供参考。

import urllib.request
import urllib.parse

link = "http://dss.nyiso.com/dss_oasis/PublicReports"
params = {
    'reportKey': 'DAM_LBMP_ZONE',
    'startDate': '04/17/2021',
    'endDate': '04/17/2021',
    'version': 'L',
    'dataFormat': 'CSV',
    'filter': ['CAPITL','CENTRL'],
}

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36'
}
data = urllib.parse.urlencode(params,doseq=True).encode()
req = urllib.request.Request(link, data=data, headers=headers)
res = urllib.request.urlopen(req)
with open("output.csv","wb") as f:
    f.write(res.read())

urlencode行中只需要进行小的修改。

Output: 输出

如果您有任何问题,请告诉我:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM