【问题标题】:How to do a partial conditioning on a tag for find_all() in bs4?如何在 bs4 中对 find_all() 的标签进行部分调节?
【发布时间】:2021-01-24 11:27:30
【问题描述】:

我有一个 xml,它有多个标签,如下所示:

<textblock height="55" hpos="143" id="Page1_Block5" lang="en-US" stylerefs="StyleId-E6BF91A3-3D6A-442F-9A46-22A0459A02E9- font1" vpos="226" width="393">

我想获取由页面聚集的所有<textblock> 标记(textblock 标记中的id 属性)。但是,我的id是这样写的:id="Page1_Block5"

但是,我只想以页码而不是块号为条件。 (我想要特定页面的所有块)。

我正在尝试通过以下方式做同样的事情:

xml_soup = bs.BeautifulSoup(table, 'lxml')

text_blocks = xml_soup.find_all('textblock')

我还需要在find_all() 函数中添加哪些参数才能仅根据Page{} 调整结果?

【问题讨论】:

    标签: python-3.x beautifulsoup xml-parsing


    【解决方案1】:

    这应该对你有帮助:

    text_blocks = xml_soup.find_all('textblock', id = lambda value: value and value.startswith("Page1"))
    

    这是我的全部代码:

    from bs4 import BeautifulSoup
    
    xml = """
    <textblock height="55" hpos="143" id="Page1_Block5" lang="en-US" stylerefs="StyleId-E6BF91A3-3D6A-442F-9A46-22A0459A02E9- font1" vpos="226" width="393">
    """
    
    xml_soup = BeautifulSoup(xml,'lxml')
    
    text_blocks = xml_soup.find_all('textblock', id = lambda value: value and value.startswith("Page1"))
    

    说明:

    lambda 函数检查id 是否以Page1 开头。如果是,则它检索标签。我还向xml 变量添加了更多值。这是我使用的测试数据:

    xml = """
    <textblock height="55" hpos="143" id="Page1_Block5" lang="en-US" stylerefs="StyleId-E6BF91A3-3D6A-442F-9A46-22A0459A02E9- font1" vpos="226" width="393">
    <textblock height="55" hpos="143" id="Page1_Block4" lang="en-US" stylerefs="StyleId-E6BF91A3-3D6A-442F-9A46-22A0459A02E9- font1" vpos="226" width="393">
    <textblock height="55" hpos="143" id="Page2_Block5" lang="en-US" stylerefs="StyleId-E6BF91A3-3D6A-442F-9A46-22A0459A02E9- font1" vpos="226" width="393">
    <textblock height="55" hpos="143" id="Page1_Block1" lang="en-US" stylerefs="StyleId-E6BF91A3-3D6A-442F-9A46-22A0459A02E9- font1" vpos="226" width="393">
    """
    

    如您所见,有 3 个textblock 标签,其中idPage1 开头。当我使用这个测试数据运行我的代码并打印出变量 text_blocks 的长度时,这是我得到的输出:

    >>> len(text_blocks)
    3
    

    这表明代码有效!希望这会有所帮助!

    P.S:U 可以参考this 链接以获取有关提取具有以特定字符串开头的id 元素的更多详细信息。

    【讨论】:

    • 感谢您的支持!一个来自我身边的卑微请求。你也可以接受我的答案作为最佳答案吗?
    猜你喜欢
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 2017-12-22
    • 1970-01-01
    相关资源
    最近更新 更多