我已经基于属性在Beautiful汤中使用find_all创建了一个列表。如何退回我想要的节点?

时间:2019-06-29 00:10:12

标签: python beautifulsoup xml-parsing

我有一个MS Word文档模板,该模板具有结构化文档标签,包括重复部分。我正在使用Python脚本提取重要部分并将其发送到数据框。我的脚本可以按预期工作80%的文档,但我经常失败。问题是在找到第一个重复部分时,我一直在执行以下操作:

    from bs4 import BeautifulSoup as BS
    soup = BS(f, 'xml')  # entire xml; file is called soup
    soupdocument=soup.document  #document only child node of soup  
    soupbody=soupdocument.body  # body is the only child node of document 
    ODR=soupbody.contents[5]  

通常可以使用,但是某些用户设法在文档中未锁定的某些位置按回车键。我知道应该通过不选择汤体的第5个元素来解决该问题。

    soupbody.find_all({tag})
><w:tag w:val="First Name"/>,
 <w:tag w:val="Last Name"/>,
 <w:tag w:val="Position"/>,
 <w:tag w:val="Phone Number"/>,
 <w:tag w:val="Email"/>,
 <w:tag w:val="ODR Repeating Section"/>,

以上是返回的部分列表,实际列表中包含几十个标签,有些重复。我想要的部分是上面列出的最后一个部分,通常但并非总是在第一个代码块中找到。我相信我可以在find_all({tag:SOMETHING}}之后加上一个冒号,我已经尝试过剪切和粘贴“ ODR重复节”的所有不同部分,但这是行不通的。找到此节的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您好,也许除了标记名称之外,还要指定您要搜索的属性?

tags = soup.findAll('tag', {'val" : 'ODR Repeating Section'})