簡體   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