BeautifulSoup通过里面的文本找到div标签

时间:2019-02-25 21:49:54

标签: python html web-scraping beautifulsoup

我有这种html格式

<tr>
  <th>
    <div>USING THIS TEXT</div>
  </th>
  <td>
    <div class="plainlist">
      <ul>
        <li>
           "GET THIS TEXT HERE"
           <span> 
             " ("
             <span class="bday"> "AND GET THIS TEXT HERE"
             ")"
           </span>
        </li>
      </ul>
    </div>
  </td>
</tr>

我已经找到了如何使用find和id访问无序列表的方法,但是不确定当我想要的div没有id而是只有我可以使用的文本时怎么做。

如果有一个ID,则python代码为

test = soup.find(id="[SOME_ID]")
        if test is not None:
            ul = cast.find_next('ul')
            for li in ul.findAll('li'):
                if(li is not None):
                    print(li.text)

但是我不确定如何只知道div内的文本而不是id来获得“测试”值。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您必须导入re模块才能按文本查找标签。尝试让我知道是否可行。

import bs4
import re
html_doc="""<html><tr>
  <th>
    <div>USING THIS TEXT</div>
  </th>
  <td>
    <div class="plainlist">
      <ul>
        <li>
           "GET THIS TEXT HERE"
           <span>
             " ("
             <span class="bday"> "AND GET THIS TEXT HERE"
             ")"
           </span>
        </li>
      </ul>
    </div>
  </td>
</tr></html>"""
soup = bs4.BeautifulSoup(html_doc, 'html.parser')
test=soup.find('div' , text=re.compile("USING THIS TEXT"))
if test is not None:
            ul = test.find_next('ul')
            for li in ul.findAll('li'):
                if(li is not None):
                    print(li.text)

输出:

"GET THIS TEXT HERE"

             " ("
              "AND GET THIS TEXT HERE"
             ")"