Как извлечь определенные данные, отфильтровывая те, которые включают colspan?

#python #web-scraping #beautifulsoup

#python #веб-очистка #beautifulsoup

Вопрос:

Например:

 <tbody>
<tr><td colspan="2"><p>Unwanted Text 1</p>
</td>
</tr>
<tr><td><a href="http://www.example.com">Text 1</a></td>
<td>Nonesense 1</td>
</tr>
<tr><td><a href="http://www.example2.com">Text 2</a></td>
<td>Nonesense2</td>
</tr>
<tr><td colspan="2"><p class="second-title">Unwanted Text 1</p>
</td>
</tr>
</tbody>
  

Я пытался:

 soup.select('tr')
for x in g:
    print(x.contents[0].text)
  

Вывод:

 Unwanted Text 1
Text 1
Text 2
Unwanted Text 2
  

Как я могу получить только «Текст 1» и «Текст 2», опуская другие.

Ответ №1:

Вы можете сопоставлять a элементы напрямую:

 for item in soup.select('tr > td > a'):
    print(item.get_text())
  

Или, если вы специально хотите пропустить строки с td элементами, имеющими colspan атрибуты:

 for item in soup.select('tr'):
    if item.find("td", colspan=True):
        continue
    print(item.td.get_text())  # get text of the first cell in the row
  

Комментарии:

1. Потрясающе, второй ответ — тот, который я искал. Спасибо.