【问题标题】:Python - How to extract elements between multiple tagsPython - 如何在多个标签之间提取元素
【发布时间】:2015-11-09 02:46:10
【问题描述】:

工作 HTML:

<h2> Heading 1 </h2>
<h3> Subheading 1.1 </h3>
<a href="#">Link 1</a> | <a href="#">Link 2 </a> | <a href="#">Link 3</a>
<h3> Subheading 1.2 </h3>
<a href="#">Link 1</a> | <a href="#">Link 2 </a> | <a href="#">Link 3</a> | <a href="#">Link 4</a>
<h3> Subheading 1.3 </h3>
<a href="#">Link 1</a>
<h2> Heading 2 </h2>
<h3> Subheading 2.1 </h3>
<a href="#">Link 1</a> | <a href="#">Link 2</a>
<h3> Subheading 2.2 </h3>
<a href="#">Link 1</a> | <a href="#">Link 2 </a>
<h3> Subheading 2.3 </h3>
<a href="#">Link 1</a>
<h2> Heading 3 </h2>

问题: 我想在每个h2 标签之间提取h3 标签,并在h3 标签之间提取所有anchors

我有什么:

soup = BeautifulSoup("""<h2> Heading 1 </h2>
<h3> Subheading 1.1 </h3>
<a href="#">Link 1</a> | <a href="#">Link 2 </a> | <a href="#">Link 3</a>
<h3> Subheading 1.2 </h3>
<a href="#">Link 1</a> | <a href="#">Link 2 </a> | <a href="#">Link 3</a> | <a href="#">Link 4</a>
<h3> Subheading 1.3 </h3>
<a href="#">Link 1</a>
<h2> Heading 2 </h2>
<h3> Subheading 2.1 </h3>
<a href="#">Link 1</a> | <a href="#">Link 2</a>
<h3> Subheading 2.2 </h3>
<a href="#">Link 1</a> | <a href="#">Link 2 </a>
<h3> Subheading 2.3 </h3>
<a href="#">Link 1</a>
<h2> Heading 3 </h2>""", 'html5lib')

for row in soup.find_all("h2"):
    print(row.text)
    print(row.find_next('h3'))
    print('################')

当前结果:

################
 Heading 1 
<h3> Subheading 1.1 </h3>
################
 Heading 2 
<h3> Subheading 2.1 </h3>
################
 Heading 3 
None
################

想要的结果:

################
Heading 1 
Subheading 1.1
Link 1
Link 2
Link 3
--------
Subheading 1.2 
Link 1
Link 2
Link 3
Link 4
--------
Subheading 1.3 
Link 1
################
Heading 2 
Subheading 2.1 
Link 1
Link 2
--------
Subheading 2.2 
Link 1
Link 2
--------
Subheading 2.3 
Link 1
################

或者类似的东西

【问题讨论】:

    标签: python html python-3.x beautifulsoup extract


    【解决方案1】:

    这行得通!

    s = """
    
    <h2> Heading 1 </h2>
    <h3> Subheading 1.1 </h3>
    <a href="#">Link 1</a> | <a href="#">Link 2 </a> | <a href="#">Link 3</a>
    <h3> Subheading 1.2 </h3>
    <a href="#">Link 1</a> | <a href="#">Link 2 </a> | <a href="#">Link 3</a> | <a href="#">Link 4</a>
    <h3> Subheading 1.3 </h3>
    <a href="#">Link 1</a>
    <h2> Heading 2 </h2>
    <h3> Subheading 2.1 </h3>
    <a href="#">Link 1</a> | <a href="#">Link 2</a>
    <h3> Subheading 2.2 </h3>
    <a href="#">Link 1</a> | <a href="#">Link 2 </a>
    <h3> Subheading 2.3 </h3>
    <a href="#">Link 1</a>
    <h2> Heading 3 </h2>
    
    """
    
    from bs4 import BeautifulSoup as bs
    
    soup = bs(s)
    
    for i in soup.find_all('h2'):
        print i.text
        for j in i.next_siblings:
            if j.name == 'h2': break
            if j.name == 'h3':
                print '\t'+j.text
                for k in j.next_siblings:
                    if k.name == 'h3': break
                    if k.name == 'a':
                        print '\t\t'+k.text
    

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      相关资源
      最近更新 更多