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')
答案 0 :(得分:1)
使用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())
答案 1 :(得分:1)
如果您使用text='text3'
,则必须完全匹配,在您的示例中,该空格为text3
。因此,您需要找到text3
作为子字符串或包含在元素中,一旦完成,就可以获取下一个<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>'''
from bs4 import BeautifulSoup
import re
soup = BeautifulSoup(html, 'html.parser')
for a in soup.find_all('div', text=re.compile(r'text3')):
print (a.find_next('div').text.strip())
答案 2 :(得分:0)
另一种解决方案
from simplified_scrapy.simplified_doc import SimplifiedDoc
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>'''
doc = SimplifiedDoc(html)
div = doc.getElementByText('text3',tag='div').getNext('div')
print (div) # {'class': '2', 'tag': 'div', 'html': 'text4'}
print (div.text) # text4