BeautifulSoup直接进入第一个孩子的孩子,而不是索引直接的孩子

2024-10-01 02:34:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图获取加载到BS对象的xml文件中的特定标记,但是当我到达特定标记时,当我尝试使用方括号“[]”访问子对象时,BS将进入第一个子级。在

例如,对于下面的xml,我应该使用以下python代码来访问conditionalBlocks:

reportPages = reportpages.findAll('page')

for reportPage in reportPages:
    contents = reportPage.findAll('pagebody')[0].find_all('contents') #[0].findAll()
    print "contents; ", contents
    conditionalBlocks = contents[0].find_all('conditionalBlocks')
    print "conblox; ", conditionalBlocks

现在在print "contents, "...我得到了输出:

^{pr2}$

据我所知,这是不完整的;它只包含contents标记中第一个textItem标记的内容,而没有后面的其他标记

print "conblox; ", ...处的行也得到了输出; conblox; [] 说找不到conditionalBlocks标记,这是不可能的;如果我看看正在读入的xml(见下文)。在

我不明白它是如何找到第一个标记的,但不能找到其他标记,即:conditionalBlocks。 有人能帮我解释一下吗?在

以下是我正在使用的XML(为便于阅读而缩短):

<reportPages>
   <page name="Page1">
    <pageBody>
      <contents>
        <textItem>...</textItem>
        <textItem>...</textItem>
        <block>...</block>
        <block>...</block>
        <conditionalBlocks>
          <conditionalBlockDefault>...</conditionalBlockDefault>
          <conditionalBlockCases refVariable="vView">
            <conditionalBlock refVariableValue="Item Rands">...</conditionalBlock>
            <conditionalBlock refVariableValue="Item Units">...</conditionalBlock>
          </conditionalBlockCases>
        </conditionalBlocks>
     </contents>
     <style>...</style>
   </pageBody>
   <pageHeader>...</pageHeader>
   <pageFooter>...</pageFooter>
   <style>...</style>
   <conditionalRender refVariable="vView">...</conditionalRender>
  </page>
  <page name="Page2">...</page>
</reportPages>

Tags: 对象标记bsstylecontentspagexmlblock
1条回答
网友
1楼 · 发布于 2024-10-01 02:34:58

所发生的是并引用:

Using a tag name as an attribute will give you only the first tag by that name.

如果要选择所有需要的标记,则需要使用find_all方法,因为find_all会扫描整个文档以查找结果。在

如果find_all找不到任何内容,则返回一个空列表。在

我建议你阅读美丽组图documentation了解更多细节。在

相关问题 更多 >