Учитывая HTML, как это:
page_html = '''
<html>
<head>
<title>Title</title>
</head>
<body>
<div id="div1">
<h1>h1 text</h1>
<div id="div div1">text div div1
</div>
<p>text in p</p>
<table id="tab1" border="1">
<tr id="tab1 tr1" class="class1">
<td><a href="/info/tab1/tr1/td1">tab1 tr1 td 1</a></td>
<td><a href="/info/tab1/tr1/td2">tab1 tr1 td 2</a></td>
<td><a href="/info/tab1/tr1/td3">tab1 tr1 td 3</a></td>
</tr>
<tr id="tab1 tr2" class="class1">
<td><a href="/info/tab1/tr2/td1">tab1 tr2 td 1</a></td>
<td><a href="/info/tab1/tr2/td2">tab1 tr2 td 2</a></td>
</tr>
<tr id="tab1 tr3" class="class2">
<td><a href="/info/tab1/tr3/td1">tab1 tr3 td 1</a></td>
<td><a href="/info/tab1/tr3/td2">tab1 tr3 td 2</a></td>
</tr>
</table>
<table id="tab2" border="1">
<tr id="tab2 tr1" class="class2">
<td><a href="/info/tab2/tr1/td1">tab2 tr1 td 1</a></td>
<td><a href="/info/tab2/tr1/td2">tab2 tr1 td 2</a></td>
<td><a href="/info/tab2/tr1/td3">tab2 tr1 td 3</a></td>
</tr>
<tr id="tab2 tr2" class="class2">
<td><a href="/info/tab2/tr2/td1">tab2 tr2 td 1</a></td>
<td><a href="/info/tab2/tr2/td2">tab2 tr2 td 2</a></td>
</tr>
<tr id="tab2 tr3" class="class3">
<td><a href="/info/tab2/tr3/td1">tab2 tr3 td 1</a></td>
<td><a href="/info/tab2/tr3/td2">tab2 tr3 td 2</a></td>
</tr>
</table>
</div>
</body>
</html>
'''
Я хотел бы получить текст из таблицы td с id=tab2
, где tr имеют атрибут class=class2
, соответствующий:
<tr id="tab2 tr1" class="class2">
<td><a href="/info/tab2/tr1/td1">tab2 tr1 td 1</a></td>
<td><a href="/info/tab2/tr1/td2">tab2 tr1 td 2</a></td>
<td><a href="/info/tab2/tr1/td3">tab2 tr1 td 3</a></td>
</tr>
<tr id="tab2 tr2" class="class2">
<td><a href="/info/tab2/tr2/td1">tab2 tr2 td 1</a></td>
<td><a href="/info/tab2/tr2/td2">tab2 tr2 td 2</a></td>
</tr>
Мое частичное решение:
from bs4 import BeautifulSoup
bsobj = BeautifulSoup(page_html)
res = bsobj.find('table', id='tab2').findAll('tr', {'class':'class2'})
, но я не могу извлечь текст.
Попытка с пониманием списка:
[td.text for td in res]
получает общее(справа) результат, но в виде списка двух tr и с аномальным \n
, то есть:
['\ ntab2 tr1 td 1 \ ntab2 tr1 td 2 \ ntab2 tr1 td 3 \ n',' \ ntab2 tr2 td 1 \ ntab2 tr2 td 2 \ n ']
Есть ли более чистый способ получения текста для каждого td, удовлетворяющего моим условиям в таблице и tr?