这是HTML代码
<tr id="n1102">
<td align="right" valign="top" style="width: 50px; text-align: left;">
<a href="analects/xue-er/zh#n1102" class="popup" style="font-size: 12pt;">1</a>
<div style="display: inline-block; zoom: 1; *display: inline;'">
<a href="dictionary.pl?if=gb&id=1102" class="sprite-more" title="someText1" rel="nofollow">someText1
<div style="display: inline;"></div>
</a>
</div>
</td>
<td valign="top" style="white-space: nowrap; color: #777777;" class="ctext opt">Text not want</td>
<td class="ctext">
<div id="comm1102"></div>THE WANTED TEXT
</td>
</tr>
如何查找通缉文本或如何根据要求进行过滤?下面的代码返回不需要的文本。
import bs4
root=bs4.BeautifulSoup(data, "html.parser")
tds=root.find_all('td', {'class': 'ctext'})
print(tds)
答案 0 :(得分:0)
如果所需文本始终位于<div>
旁边,则可以使用CSS选择器td.ctext:has(> div)
(使用具有直接性的{strong>直接的<td>
查找所有class="ctext"
>孩子<div>
):
例如(txt
包含问题中的HTML代码段):
soup = BeautifulSoup(txt, 'html.parser')
for td in soup.select('td.ctext:has(> div)'):
print(td.get_text(strip=True))
打印:
THE WANTED TEXT
或者:您可以选择所有<div>
以“ comm ...”开头的id=
标签,然后查找下一个同级文本:
for div in soup.select('div[id^="comm"]'):
print(div.find_next_sibling(text=True).strip())
答案 1 :(得分:0)
另一种方法。
from simplified_scrapy import SimplifiedDoc
html = """
<tr id="n1102">
<td align="right" valign="top" style="width: 50px; text-align: left;">
<a href="analects/xue-er/zh#n1102" class="popup" style="font-size: 12pt;">1</a>
<div style="display: inline-block; zoom: 1; *display: inline;'">
<a href="dictionary.pl?if=gb&id=1102" class="sprite-more" title="someText1" rel="nofollow">someText1
<div style="display: inline;"></div>
</a>
</div>
</td>
<td valign="top" style="white-space: nowrap; color: #777777;" class="ctext opt">Text not want</td>
<td class="ctext">
<div id="comm1102"></div>THE WANTED TEXT
</td>
</tr>
"""
doc = SimplifiedDoc(html)
print (doc.select('div#comm1102').nextText())
结果:
THE WANTED TEXT
还有更多示例:https://github.com/yiyedata/simplified-scrapy-demo/tree/master/doc_examples