Я пытаюсь сканировать ежемесячные данные (csv файлы) из Погода Канада .
Обычно нужно выбрать год / месяц / день из выпадающего списка и нажать «GO», а затем нажать кнопку «Загрузить данные» для этих данных выбранного месяца + года, как ниже. Я хочу загрузить все файлы данных в формате CSV из всех доступных месяцев / годов в python (с Beautifulsoup 4).
Я пытался изменить некоторые коды из другого вопроса здесь , но безуспешно. Пожалуйста помоги. из bs4 импорт BeautifulSoup # Python 3.x из urllib.request импорт urlopen, urlretrieve
# Removed the trailing / from the URL
urlJan2020 =
'''https://climate.weather.gc.ca/climate_data/hourly_data_e.html?hlyRange=2004-09-24%7C2020-03-03&dlyRange=2018-05-14%7C2020-03-03&mlyRange=%7C&StationID=43403&Prov=NS&urlExtension=_e.html&searchType=stnProx&optLimit=yearRange&StartYear=1840&EndYear=2020&selRowPerPage=25&Line=0&txtRadius=50&optProxType=city&selCity=44%7C40%7C63%7C36%7CHalifax&selPark=&txtCentralLatDeg=&txtCentralLatMin=0&txtCentralLatSec=0&txtCentralLongDeg=&txtCentralLongMin=0&txtCentralLongSec=0&txtLatDecDeg=&txtLongDecDeg=&timeframe=1&Year=2020&Month=1&Day=1#'''
u = urlopen(urlJan2020)
try:
html = u.read().decode('utf-8')
finally:
u.close()
soup = BeautifulSoup(html, "html.parser")
# Select all A elements that have an href attribute, starting with http://
for link in soup.select('a[href^="http://"]'):
href = link.get('href')
if not any(href.endswith(x) for x in ['.csv','.xls','.xlsx']):
continue
filename = href.rsplit('/', 1)[-1]
# You don't need to join + quote as URLs in the HTML are absolute.
# However, we need a https:// URL (in spite of what the link says: check request in your web browser's developer tools)
href = href.replace('http://','https://')
print("Downloading %s to %s..." % (href, filename) )
urlretrieve(href, filename)
print("Done.")