Я вхожу в RoboBrowser, и я следовал этой ссылке учебника, чтобы сделать это:
http://theautomatic.net/2017/09/19/robobrowser-automating-online-forms/
Учебник связывает этот сайт, чтобы очистить:
https://www.wunderground.com/history
Но когда руководство было написано, оно было написано 19 сентября 2019 года, и с тех пор сайт изменился.
Это то, что сайт был раньше:
https://web.archive.org/web/20170919080607/https: // www.wunderground.com/history/
Оригинальный рабочий код:
'''Create RoboBrowser object
This will act similar to a typical web browser'''
browser = RoboBrowser(history=True)
'''Navigate browser to Wunderground's historical weather page'''
browser.open('https://www.wunderground.com/history')
'''Find the form to input zip code and date'''
forms = browser.get_forms()
form = forms[1]
'''Enter inputs into form'''
form['code'] = code
form['month'] = month
form['day'] = day
form['year'] = year
'''Submit form'''
browser.submit_form(form)
'''Scrape html of page following form submission'''
html = str(browser.parsed)
'''Use pandas to get primary table on page'''
data = pd.read_html(html)[0]
Это больше не работает, поскольку внутри имени больше не «код», а «запрос»
Что ж, я смог изменить часть кода на это заставить его работать:
br = RoboBrowser(history=True)
br.open('https://www.wunderground.com/history')
#forms = br.get_forms()
forms = br.get_forms(id='historyForm')
form = forms[0]
form['query'] = 'Lakey Forest, IL'
Но остальные поля, необходимые для заполнения, теперь находятся за пределами формы и являются частью раскрывающихся списков:
И что я пытался сделать, чтобы поместить данные в эти поля, используя select:
forms2 = br.select(selector='date-selector', id='dateSelect')
Но это не работает, и я получаю либо 500 ответов, либо индекс вне диапазона.
Как мне go заполнить месяц, день и год, а затем отправить это?
Отредактируйте вот часть исходного кода для месяцев на сайте:
<select _ngcontent-app-root-c4="" class="ng-pristine ng-valid ng-star-inserted ng-touched">
<option _ngcontent-app-root-c4="" value="1">January</option>
<option _ngcontent-app-root-c4="" value="2">February</option>
<option _ngcontent-app-root-c4="" value="3">March</option>
<option _ngcontent-app-root-c4="" value="4">April</option>
<option _ngcontent-app-root-c4="" value="5">May</option>
<option _ngcontent-app-root-c4="" value="6">June</option>
<option _ngcontent-app-root-c4="" value="7">July</option>
<option _ngcontent-app-root-c4="" value="8">August</option>
<option _ngcontent-app-root-c4="" value="9">September</option>
<option _ngcontent-app-root-c4="" value="10">October</option>
<option _ngcontent-app-root-c4="" value="11">November</option>
<option _ngcontent-app-root-c4="" value="12">December</option>
</select>