如何使用BeautifulSoup提取包含特定文本的div标签的内容

时间:2015-12-08 06:24:22

标签: python beautifulsoup

我是BeautifulSoup的新手,我希望从div标签内的列表中提取文本。这是代码

<div class="contentBlurb">Description Synonyms 
    <ul class="definitionList">
       <li>Awaiting bone marrow transplant</li>
    </ul>
</div>

我想提取“等待骨髓移植”的文字。这是我现在使用的代码,它给了我一个空列表:

for link in soup.findAll('div', text = re.compile('Description Synonyms ')):
    print link

抱歉不添加此内容。我确实有相同类名的其他div。我只对描述同义词感兴趣。其他div列在下面

<div class="contentBlurb">Applicable To    
    <ul class="definitionList"> 
        <li>Patient waiting for organ availability</li>
    </ul>
</div>

3 个答案:

答案 0 :(得分:0)

你可以这样做:     #coding:utf-8     来自bs4 import BeautifulSoup

html = """
<div class="contentBlurb">Description Synonyms
    <ul class="definitionList">
       <li>Awaiting bone marrow transplant</li>
    </ul>
</div>
 <div class="contentBlurb">Applicable To
 <ul class="definitionList">
 <li>Patient waiting for organ availability</li>
 </ul>
</div>
"""

souped = BeautifulSoup(html)
matching_divs = [div for div in souped.find_all(
    'div', {'class': 'contentBlurb'}) if 'Description Synonyms' in div.getText()]


li_elements = []
matching_uls = []

for mdiv in matching_divs:
    matching_uls.extend(mdiv.findAll('ul', {'class': 'definitionList'}))
for muls in matching_uls:
    li_elements.extend(muls.findAll('li'))

for li in li_elements:
    print(li.getText())

编辑:已更新以匹配特定div。

答案 1 :(得分:0)

如果该标记内有其他文字或标记,则D soup.find(text='...')不起作用。

尝试:

[i.find('ul', {'class': "definitionList"}).find('li').text
 for i in soup.find_all('div', {'class': "contentBlurb"})
 if 'Description Synonyms' in str(i.text)][0]

答案 2 :(得分:0)

尝试此操作,将其更改为if子句中的必需字符串。如果代码的文字有Applicable To,则会打印以下代码段,您可以将其更改为您的要求

val = soup.find('div', {'class': 'contentBlurb'}).text
if "Description Synonyms" in val:
     print soup.find('div', {'class': 'contentBlurb'}).find('ul', {'class': 'definitionList'}).find('li').text