python - ulr 不唯一的 pandas.read_html 的替代方案?

标签 python selenium web-scraping html-table

我想从“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/

相关文章:

python - Tensorflow softmax_cross...()函数float类型错误

python - 用numpy乘以高阶矩阵

linux - Selenium grid ubuntu主机无法在Windows guest 中创建 Node

c# - 如何从 div 标签中获取文本?

python - 使用 Python 的请求发送 ASP.net POST

python - 抓取酒店评论的隐藏文本

python - 更改 python 数据表中的列类型

java - 如何检索文本字段内的文本

python - 如何在 BeautifulSoup 中找到 `td` 父标签的所有 `tr` 且具有 `class="Accordion-toggle main-row"' 的父标签?

python - Digi ConnectPort 数据库适配器