首页 > 解决方案 > 使用 Python 直接从网站下载 CSV

问题描述

我正在使用下面的代码尝试下载 csv,但它不起作用,谁能帮我解决这个问题?

import urllib.request, urllib.error, urllib.parse

url = 'https://covid19.who.int/table'
csvfile = r"C:/Users/RONEYGALAN/Desktop/OMS/Covid.csv"

#open main page
response = urllib.request.urlopen(url)
webContent = response.read()
wc = str(webContent)

#get csv URL
i = wc.find(r"table-data.csv")
i2 = wc.find("/WHO-COVID-19-global-", i-200)
csvURL = "https://covid19.who.int/table" + wc[i2:i+17]
print(csvURL)

#get csv
csvresp = urllib.request.urlopen(csvURL)
csvdata = str(csvresp.read())
print(len(csvdata), "bytes")

#save csv to file
print("Saving To", csvfile)
f = open(csvfile,"w")
f.write(csvdata.replace(r"\r\n","\n"))
f.close()

如果有人有任何其他代码建议,请随时发布

这是正在发生的错误,我不知道我是否将正确的参数传递给函数,但由于这是我第一次使用网络抓取,也许我需要一些合作。

无效 URL:URL 不能包含控制字符。'/table/WHO-COVID-19-global-table-data.csv "d' (至少找到'')

标签: pythonweb-scraping

解决方案


您在#get csv URL 步骤中的代码导致错误的 url,即https://covid19.who.int/table/WHO-COVID-19-global-table-data.csv" d. 这就是它产生 InvalidURL 错误的原因

因此,您应该在最后删除一些多余的字符,方法是更改
csvURL = "https://covid19.who.int/table" + wc[i2:i+17]
​​为
csvURL = "https://covid19.who.int/table" + wc[i2:i+14]

然后,它应该会产生正确的格式 urlhttps://covid19.who.int/table/WHO-COVID-19-global-table-data.csv


推荐阅读