简体   繁体   English

如何查找 id 具有前缀“Translations_”的元素?

[英]How to find elements whose id has prefix "Translations_"?

I have a html我有一个 html

<details data-level="2" open="">
    <details data-level="5" open="">
        <summary class="section-heading">
            <h5 id="Translations">Translations</h5>
        </summary>
    </details>
    <details data-level="5" open="">
        <summary class="section-heading">
            <h5 id="Translations_2">Translations</h5>
        </summary>
    </details>
    <details data-level="5" open="">
        <summary class="section-heading">
            <h5 id="Translations_6">Translations</h5>
        </summary>
    </details>
</details>

I would like to extract such elements which are signified by Translation我想提取Translation所表示的这些元素

<h5 id="Translations">Translations</h5>
<h5 id="Translations_2">Translations</h5>
<h5 id="Translations_6">Translations</h5>

With soup.select('details[data-level] > summary[class] > h5[id="Translations"]') , I'm able to extract only the first element.使用soup.select('details[data-level] > summary[class] > h5[id="Translations"]') ,我只能提取第一个元素。 Could you please explain how to modify my code to do so?你能解释一下如何修改我的代码吗?

from bs4 import BeautifulSoup

texte = """
<details data-level="2" open="">
    <details data-level="5" open="">
        <summary class="section-heading">
            <h5 id="Translations">Translations</h5>
        </summary>
    </details>
    <details data-level="5" open="">
        <summary class="section-heading">
            <h5 id="Translations_2">Translations</h5>
        </summary>
    </details>
    <details data-level="5" open="">
        <summary class="section-heading">
            <h5 id="Translations_6">Translations</h5>
        </summary>
    </details>
</details>
"""

soup = BeautifulSoup(texte, 'html.parser')
soup.select('details[data-level] > summary[class] > h5[id="Translations"]')

You can use a attr^=value CSS selector .您可以使用attr^=value CSS 选择器

Represents elements with an attribute name of attr whose value is prefixed (preceded) by value.表示属性名称为 attr 的元素,其值以值作为前缀(在前)。

from bs4 import BeautifulSoup

data = '''\
<details data-level="2" open="">
    <details data-level="5" open="">
        <summary class="section-heading">
            <h5 id="Translations">Translations</h5>
        </summary>
    </details>
    <details data-level="5" open="">
        <summary class="section-heading">
            <h5 id="Translations_2">Translations</h5>
        </summary>
    </details>
    <details data-level="5" open="">
        <summary class="section-heading">
            <h5 id="Translations_6">Translations</h5>
        </summary>
    </details>
</details>
'''

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

for e in soup.select('h5[id^=Translations]'):
    print(e)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM