首页 > 解决方案 > 使用beautifulsoup在我们有div标签后跟听者标签的地方提取内容

问题描述

我试图在它们在一起时提取 div 标签和标题标签。前任:

<h3>header</h3>
<div>some text here
    <ul>
             <li>list</li>
             <li>list</li>
             <li>list</li>
     </ul>
</div> 

我尝试了以下链接中提供的解决方案。这里是 div 标签内的标题标签......但我的要求是标题标签后的 div 标签。

使用 beautifulSoup、Python 在 h3 和 div 标签中抓取文本

我也尝试过这样的事情但没有奏效

soup = bs4.BeautifulSoup(page, 'lxml')


found = soup..find_all({"h3", "div"})

我需要来自 H3 标记的内容和 div 标记中的所有内容,只要这两个组合存在。

标签: python-3.xweb-scrapingbeautifulsoup

解决方案


您可以使用 CSS 选择器-这h3:has(+div)将选择所有紧随其后的:<h3>div

data = '''<h3>header</h3>
<div>some text here
    <ul>
             <li>list</li>
             <li>list</li>
             <li>list</li>
     </ul>
</div>
<h3>This header is not selected</h3>
<p>Beacause this is P tag, not DIV</p>
'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'html.parser')

for h3 in soup.select('h3:has(+div)'):
    print('Header:')
    print(h3.text)
    print('Next <div>:')
    print(h3.find_next_sibling('div').get_text(separator=",", strip=True))

印刷:

Header:
header
Next <div>:
some text here,list,list,list

进一步阅读:

CSS 选择器参考


推荐阅读