Python在BeautifulSoup中解析时跳过XML子节点

时间:2017-12-07 21:36:11

标签: python xml parsing beautifulsoup tags

我遇到了某些子标签组没有完全解析的问题。我使用与其他标签相同的逻辑,但由于我无法看到它跳过除了我想要的标签的第一个条目以外的所有条目。我当前脚本的基本片段如下所示:

for xml_string in separated_xml(infile):

   soup = BeautifulSoup(xml_string, "lxml")

        us_grant = soup.findAll("us-patent-grant")

        with open('./output.csv', 'ab+') as f:
            writer = csv.writer(f, dialect = 'excel')

            for info in us_grant:

              data = []
              us_class_search = soup.findAll("us-field-of-classification-search")

              for item2 in us_class_search:

                if item2.find("classification-national"):

                  country_search = item2.find("country")
                  main_class_search = item2.find("main-classification")

                  data.append((country_search).text)
                  data.append((main_class_search).text)
              print(data)

每次迭代后我print(data)只给出了每个国家主要分类标签的第一个条目每个 us-patent-grant 父母;但还有更多。例如,带有这些标记的XML文件如下所示:

<us-field-of-classification-search>
<classification-national>
<country>US</country>
<main-classification>D 1100-130</main-classification>
<additional-info>unstructured</additional-info>
</classification-national>
<classification-national>
<country>US</country>
<main-classification>D 1199</main-classification>
</classification-national>
<classification-national>
<country>US</country>
<main-classification>426  5</main-classification>
</classification-national>
<classification-national>
<country>US</country>
<main-classification>426 76</main-classification>
</classification-national>
</us-field-of-classification-search>

我知道 if item2语句没有正确地遵循,因为即使我把它拿出来它仍然以相同的方式运行 for item2循环;只查找和附加每个下面的第一个标签。这意味着它必须是循环本身没有运行并找到每个实例并将第一个标记视为所有实例。

有什么想法吗?我没有看到任何明显的逻辑错误。

如果您想查看XML本身,可以找到它here on USPTO

2 个答案:

答案 0 :(得分:1)

item2正在迭代所有<us-field-of-classification-search>元素,其中样本中只有一个元素。

在该循环中,您应该迭代<classification-national>个元素,但是您只检查第一个元素。

答案 1 :(得分:0)

引入 for-loop 时的简单修复:

for items in item2.findAll("classification-national")

允许我点击父母内部的每个组件。