美丽汤特定的td标签?

时间:2020-07-02 18:56:36

标签: html beautifulsoup html-table

这是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&amp;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)

2 个答案:

答案 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&amp;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