【问题标题】:Beautiful Soup specific td tag?Beautiful Soup 特定的 td 标签?
【发布时间】:2020-07-02 18:56:36
【问题描述】:

这是 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>

如何找到THE WANTED TEXT或如何根据需求进行过滤?下面的代码返回Text not want。

import bs4
root=bs4.BeautifulSoup(data, "html.parser")
tds=root.find_all('td', {'class': 'ctext'})
print(tds)

【问题讨论】:

    标签: html beautifulsoup html-table


    【解决方案1】:

    如果想要的文本总是在&lt;div&gt; 旁边,您可以使用CSS 选择器td.ctext:has(&gt; div)(查找所有&lt;td&gt; 和class="ctext" 具有直接 子&lt;div&gt;):

    例如(txt 包含问题中的 HTML sn-p):

    soup = BeautifulSoup(txt, 'html.parser')
    
    for td in soup.select('td.ctext:has(> div)'):
        print(td.get_text(strip=True))
    

    打印:

    THE WANTED TEXT
    

    或者:您可以选择id=以“comm...”开头的所有&lt;div&gt;标签,然后查找下一个文本兄弟:

    for div in soup.select('div[id^="comm"]'):
        print(div.find_next_sibling(text=True).strip())
    

    【讨论】:

      【解决方案2】:

      另一种方法。

      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

      【讨论】:

        猜你喜欢
        • 2015-08-24
        • 1970-01-01
        • 1970-01-01
        • 2022-01-16
        • 2020-07-04
        • 2019-02-20
        • 1970-01-01
        • 1970-01-01
        • 2017-05-27
        相关资源
        最近更新 更多