首页 > 解决方案 > 通过 text beautifulsoup 从第二个 div 中提取文本

问题描述

A 有以下 html 代码。需要根据“text3”值提取text4

    <div class="main">
<ul>
<li>
<div class="1"> text1 </div>
<div class="2"> text2 </div>
</li>
<li>
<div class="1"> text3</div>
<div class="2"> text4</div>
</li>
</ul></div>

我使用了这段代码,但它不起作用。我错过了什么还是有更简单的解决方案?

a.find_next_sibling('div')[0]
for a in soup.find_all('div', text='text3')

标签: pythonhtmlbeautifulsoup

解决方案


使用 css 选择器识别标签并使用find_next('div')

html='''   <div class="main">
<ul>
<li>
<div class="1"> text1 </div>
<div class="2"> text2 </div>
</li>
<li>
<div class="1"> text3</div>
<div class="2"> text4</div>
</li>
</ul></div>'''

soup=BeautifulSoup(html,'html.parser')
print(soup.select_one('.main div:contains(text3)').find_next('div').text.strip())

或者你可以使用正则表达式 re。

from bs4 import BeautifulSoup
import re
html='''   <div class="main">
<ul>
<li>
<div class="1"> text1 </div>
<div class="2"> text2 </div>
</li>
<li>
<div class="1"> text3</div>
<div class="2"> text4</div>
</li>
</ul></div>'''

soup=BeautifulSoup(html,'html.parser')
print(soup.find('div', class_='main').find('div',text=re.compile("text3")).find_next('div').text.strip())

推荐阅读