在获取表格HTML数据时,如何获取没有文本值的`<td>```标签在Selenium Python中的列表中占据位置?

时间:2019-06-10 15:11:11

标签: python selenium

我需要获取HTML表格数据作为列表。该表有100列和50行。并非每个<td>都有文本值,并且每一行都与其他行不同(不同列中没有文本值)

因此,当我使用row.text时,它将返回一个列表,而忽略没有文本的列表。每行的列表都有不同的长度。这不适用于将列表写入excel文件。

如果我这样做的话,<td><td>一一地形成一个列表。这太慢了。

for row in driver.find_elements(By.XPATH, '//table[@id="mytable"]/tbody/tr')
    print(row.text)

html

<table id='mytable'>
<tbody>
  <tr>
    <td>abc</td>
    <td></td>
    <td><a href='javascript:...'>cbd</a></td>
  </tr>
  <tr>
    <td>ttt</td>
    <td>bbb</td>
    <td></td>
  </tr>
<tbody>
</table>

使用BeautifulSoup

from bs4 import BeautifulSoup

soup = BeautitulSoup(driver.find_element(By.XPATH, '//table[@id="mytable"]/tbody').get_attribute('innerHTML'), features='lxml')
for tr in soup.find_all('tr'):
    list = ([text for text in tr.strings])
    print(list)

我仍然得到像['abc','cbd']这样的列表,我需要得到像['abc','','cbd']一样的列表

2 个答案:

答案 0 :(得分:0)

您可以使用Selenium来获取整个表格,然后使用Beautiful Soup对其进行解析:

from bs4 import BeautifulSoup

html_table = driver.find_elements(By.XPATH, '//table[@id="mytable"]')
soup = BeautifulSoup(html_table)

# This is a fast way to get a list of all the <td> tags, even the empty ones:
td_list = soup('td')

然后从那里可以将td标记写入excel文件。

但是根据您的情况,我可能只使用请求库而不是硒来获取整个页面的HTML,然后使用Beautiful Soup来获取表,然后从那里解析td标签。

答案 1 :(得分:0)

感谢gbergeson。我终于找到了使用beautifulsoup的方式,而不是跳过空文本。

from bs4 import BeautifulSoup

soup = BeautitulSoup(driver.find_element(By.XPATH, '//table[@id="mytable"]/tbody').get_attribute('innerHTML'), features='lxml')
for tr in soup.find_all('tr'):
    l = (td.get_text() for td in tr.find_all('td'))
    print(l)