Альтернатива pandas .read_ html, где ulr не является уникальным? - PullRequest
1 голос
/ 26 февраля 2020

Я хочу получить доступ к данным из таблицы html из раздела «ERGEBNIS» с помощью python 3.7. Проблема заключается в том, что результаты для каждой комбинации раскрывающихся значений отображаются только после нажатия кнопки «Отправить». Это, однако, не меняет URL, поэтому я понятия не имею, как получить доступ к таблице результатов после обновления входных значений раскрывающихся списков.

Вот что я сделал до сих пор:


from selenium import webdriver
from selenium.webdriver.support.ui import Select
import time

browser.get('https://daten.ktbl.de/feldarbeit/entry.html')

#Fix values of the drop down fields:

fertilizer = Select(browser.find_element_by_name("hgId"))
fertilizer.select_by_value("2") 

fertilizer = Select(browser.find_element_by_name("gId"))
fertilizer.select_by_value("193") 

fertilizer = Select(browser.find_element_by_name("avId"))
fertilizer.select_by_value("383")  

fertilizer = Select(browser.find_element_by_name("hofID"))
fertilizer.select_by_value("2") 

fertilizer = Select(browser.find_element_by_name("flaecheID"))
fertilizer.select_by_value("5") 

fertilizer= Select(browser.find_element_by_name("mengeID"))
fertilizer.select_by_value("60") 


# Submit changes to show the results of this particular combination of values

button = browser.find_element_by_xpath("//*[@type='submit']")
button.click()

Однако отправка изменений не меняет URL, поэтому я не знаю, как получить доступ к результатам. (здесь "ERGEBINS") таблица.

В противном случае мой подход заключался бы в использовании pd.read_ html как-то так:

...

url = browser.current_url
time.sleep(1)
df_list = pd.read_html(url, match = "Dieselbedarf")

Но поскольку URL-адрес не уникален для каждого результата, это не делает смысл. Та же проблема была бы с BeautifulSoup, или, по крайней мере, я не понимаю, как я могу сделать это без уникального URL.

Есть идеи, как иначе я могу получить доступ к таблице html?

РЕДАКТИРОВАТЬ: Ответ @ bink1time может решить мою проблему, как получить доступ к таблице без URL, но через строку HTML:

html_source = browser.page_source
df_list = pd.read_html(html_source, match = "Dieselbedarf")

1 Ответ

0 голосов
/ 26 февраля 2020

Вы, вероятно, можете просто получить html источник:

html_source = browser.page_source

В соответствии с документацией: https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.read_html.html read_ html принимает URL-адрес, похожий на файл объект или необработанная строка, содержащая HTML. В этом случае вы передаете необработанную строку.

html_source = browser.page_source
df_list = pd.read_html(html_source, match = "Dieselbedarf")

Просто заметка, вам не нужно спать.

...