gpt4 book ai didi

python-2.7 - 如何使用列名和行名(不是索引)返回没有 ID 的网页表格单元格值

转载 作者:行者123 更新时间:2023-12-03 08:08:42 26 4
gpt4 key购买 nike

关于 Python 和 Selenium 抓取网页表格数据的大多数问题都涉及具有 ID 或类的表格,以及一些使用行数和列数的索引技术。 Xpath 技术通常也没有解释。

假设我有一个没有元素 ID 或类的表,让我们使用 this one例如。

我想返回值“Johnson”,而不计算行号或列号。

这是我的尝试(已编辑)...

import selenium.webdriver as webdriver
import contextlib
url = 'http://www.w3schools.com/html/html_tables.asp'

with contextlib.closing(webdriver.Firefox()) as driver:
driver.get(url)
columnref = 3
rowref = 4
xpathstr = '//tr[position()=' + str(rowref) + ']//td[position()=' + str(columnref) + ']'
data = driver.find_element_by_xpath(xpathstr).text
print data

我已经在这里得到了一些很好的帮助,但我仍在使用索引。我需要通过查找它们的值来生成“columnref”和“rowref”。分别为“姓氏”和“3”。

最佳答案

只需使用此 css 选择器到达您想要的单元格 tbody > tr:nth-child(4) > td:nth-child(3),您就可以为任何单元格生成 css 选择器用同样的方式。见下文:

>>> driver.find_element_by_css_selector("tbody > tr:nth-child(4) > td:nth-child(3)")
<selenium.webdriver.remote.webelement.WebElement object at 0x10fdd4510>
>>> driver.find_element_by_css_selector("tbody > tr:nth-child(4) > td:nth-child(3)").text
u'Johnson'

或者,您可以使用 position() 标记来定位单元格位置。见下文:

>>> driver.find_element_by_xpath("//tr[position()=4]//td[position()= 3]").text
u'Johnson'
>>> driver.find_element_by_xpath("//tr[position()=5]//td[position()= 3]").text
u'Smith'

如果您想通过列名行号获取文本,您可以编写一个函数,通过查找列的索引然后获取文本来返回值如下:

def get_text_column_row(table_css, header, row):
table = driver.find_element_by_css_selector(table_css)
table_headers = table.find_elements_by_css_selector('tbody > tr:nth-child(1) > th')
table_rows = table.find_elements_by_css_selector("tbody > tr > td:nth-child(1)")

index_of_column = None
index_of_row = None

for i in range(len(table_headers)):
if table_headers[i].text == header:
index_of_column = i + 1

for i in range(len(table_rows)):
if table_rows[i].text == row:
index_of_row = i + 1

xpath = '//tr[position() = %d]//td[position() = %d]' %(index_of_row, index_of_column)

return driver.find_element_by_xpath(xpath).text

并像下面这样使用它:

>>> get_text_column_row('#main > table:nth-child(6)', 'Points', '3')
u'80'
>>> get_text_column_row('#main > table:nth-child(6)', 'Last Name', '3')
u'Doe'
>>> get_text_column_row('#main > table:nth-child(6)', 'Last Name', '4')
u'Johnson'

关于python-2.7 - 如何使用列名和行名(不是索引)返回没有 ID 的网页表格单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34385415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com