如何解决如何对bs4中的find_all标签做部分条件处理?
我有一个包含多个标签的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>
标签都由页面聚类(id
标签中的textblock
属性)。但是,我的ID是通过以下方式写入的:id="Page1_Block5"
。
但是,我只希望以页码为条件,而不是以块数为条件。 (我想要特定页面的所有块)。
我正在尝试通过以下方式进行操作:
xml_soup = bs.BeautifulSoup(table,'lxml')
text_blocks = xml_soup.find_all('textblock')
我需要在find_all()
函数中添加什么参数才能仅将结果限制在Page{}
上?
解决方法
这对您有帮助:
-O0
这是我的完整代码:
text_blocks = xml_soup.find_all('textblock',id = lambda value: value and value.startswith("Page1"))
说明:
lambda函数检查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"))
是否以id
开头。如果是,则它检索标签。我还为Page1
变量添加了一些其他值。这是我使用的测试数据:
xml
如您所见,有3个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">
"""
标签,其中textblock
以id
开头。当我使用此测试数据运行代码并打印出变量Page1
的长度时,这就是我得到的输出:
text_blocks
这表明该代码有效!希望这会有所帮助!
P.S:U可以参考this链接,以获取有关以>>> len(text_blocks)
3
提取以特定字符串开头的元素的更多详细信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。