Python 有一个HTML-如何使用xpath从它的表中获取数据

Python 有一个HTML-如何使用xpath从它的表中获取数据,python,xpath,Python,Xpath,使用selenium导航到页面、登录、运行填充搜索结果表的脚本。我使用它来获取innerHTML代码。现在我正试图使用xpath从表中获取实际数据,但我被卡住了 from selenium import webdriver from selenium.webdriver.common.keys import Keys from lxml import html from lxml import etree import requests browser = webdriver.Chrome()

使用selenium导航到页面、登录、运行填充搜索结果表的脚本。我使用它来获取innerHTML代码。现在我正试图使用xpath从表中获取实际数据,但我被卡住了

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from lxml import html
from lxml import etree
import requests

browser = webdriver.Chrome() 
url = "www.url.com"
browser.get(url) 

username = browser.find_element_by_id("username") #username form field
password = browser.find_element_by_id("password") #password form field

username.send_keys("myusername")
password.send_keys("mypassword")
password.send_keys(Keys.RETURN)
接下来,我导航到我感兴趣的页面并获取innerHTML

browser.get('a different url')
innerHTML= browser.execute_script('return document.body.innerHTML')
tree = html.fromstring(innerHTML)
有一张桌子,上面有

<tbody id='searchResultsPage'>
<tr>
<td>...</td>
<td>...</td>
</tr>
...
我没有得到任何回报

我还注意到其中一个专栏是一组带有类“action view record”的链接。因此,我尝试了以下方法:

companies = tree.xpath('//a[@class="action-view-record"]/text()')
print(companies)
这也行得通(但并不能解决我原来的问题,因为剩下的列只是标记)。但由于某些原因,它只是偶尔起作用。大约50%的时候代码不返回任何内容,其余时间返回正确的数据(公司列表)


关于如何浏览表格有什么想法吗?为什么有时代码会中断?

如果您有以下表格:

<table id='searchResultsPage'>
<tr>
<td>...</td>
<td>...</td>
</tr>
</table>
然后,根据表格的复杂性,您可以执行以下操作:

listtable = []

for row in rows:
    values = [col.text for col in row]
    listtable.append(dict(zip(headers, values)))

return listtable

我想尝试一下:

table_rows = driver.find_elements_by_xpath("//table[@id='table_id']//tr")

for row in rows:
    row_columns = row.find_element_by_xpaths('//tr')
    for column in columns:
        do_something_with_column_text(column.text)
table_rows最终将成为具有id为“table_id”的父表的所有表行的列表。然后遍历每行的每一列

['...', '...']
listtable = []

for row in rows:
    values = [col.text for col in row]
    listtable.append(dict(zip(headers, values)))

return listtable
table_rows = driver.find_elements_by_xpath("//table[@id='table_id']//tr")

for row in rows:
    row_columns = row.find_element_by_xpaths('//tr')
    for column in columns:
        do_something_with_column_text(column.text)