我想从“ERGEBNIS”部分的 html 表中访问数据 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")
最佳答案
你也许可以获取 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")
请注意,您不需要 sleep 。
关于python - ulr 不唯一的 pandas.read_html 的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60415210/