#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. Потрясающе, второй ответ — тот, который я искал. Спасибо.