我是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>
答案 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