Как я могу получить тег `` `<td>` `` без текстового значения, занимающий позицию в списке в Selenium Python при получении данных таблицы HTML? - PullRequest
2 голосов
/ 10 июня 2019

Мне нужно получить данные таблицы 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 голосов
/ 11 июня 2019

Благодаря Гберджесону.Я, наконец, понял, используя 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)
0 голосов
/ 10 июня 2019

Вы можете использовать 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.

Но, в зависимости от вашей ситуации, я, вероятно, просто использовал бы библиотеку запросов вместо selenium, чтобы получить HTML-код для всей страницы, затем использовал Beautiful Soup, чтобы получить только таблицу, а затем проанализировал тэги td.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...