我正在尝试使用urllib包从网页下载csv文件。要从该站点下载csv文件,必须发送带有适当参数的post请求
当我尝试使用请求模块时,我可以完美地下载文件。但是,当我尝试使用urllib包执行相同操作时,我也会得到一个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())
How can I download a csv file using urllib package from a website?
代码中的一个小修改,比如在传递过滤器参数中的列表时,需要在urlencode方法中传递
doseq=True
,同时传递参数以正确编码数据请参阅下面的代码以供参考
在
urlencode
行中只需要少量修改输出:
如果您有任何问题,请告诉我:)
相关问题 更多 >
编程相关推荐