Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用BeautifulSoup提取和分组元素/标记_Python_Beautifulsoup - Fatal编程技术网

Python 使用BeautifulSoup提取和分组元素/标记

Python 使用BeautifulSoup提取和分组元素/标记,python,beautifulsoup,Python,Beautifulsoup,我有一个包含以下数据类型和结构的文件: A. B 例一 1. 2. 例二 3. 4. C D 例子 1. 2. 数据在文件中以这种精确的结构继续,但最内部的..标记除外,这些标记可以重复n次,数据结构总是以标记开始,然后继续以..和..标记 我想做的是提取最外层的标记之间的所有数据,并使用和作为数据块的描述。当然,我还希望将最内部的标记彼此分离,并以某种方式保存此数据,以便可以清楚地看到最外部的数据与父数据相关 我没有一个确切的想法,我想如何保存数据,所以任何例子是赞赏 我正在用Python

我有一个包含以下数据类型和结构的文件:


A.
B
例一
1.
2.
例二
3.
4.
C
D
例子
1.
2.
数据在文件中以这种精确的结构继续,但最内部的
..
标记除外,这些标记可以重复n次,数据结构总是以
标记开始,然后继续以
..
..
标记

我想做的是提取最外层的
标记之间的所有数据,并使用
作为数据块的描述。当然,我还希望将最内部的
标记彼此分离,并以某种方式保存此数据,以便可以清楚地看到最外部的数据与父数据相关

我没有一个确切的想法,我想如何保存数据,所以任何例子是赞赏

我正在用Python模块BeautifulSoup测试这一点,并在这里搜索和阅读了很多示例,但没有找到任何可以为我指明正确方向的东西


谢谢

将标记名作为记录的容器以及其中的一个元素加倍会产生问题
BeautifulSoup
原谅了这些问题,如果您无法返回并更改XML结构,您可能希望使用以下方法

将数据分配给变量。当然,这可以从文本文件中读取:

data = '''<data>
    <from>A</from>
    <to>B</to>
    <data>
        <name>EXAMPLE ONE</name>
        <info>
            <some_data>1</some_data>
            <more_data>2</more_data>
        </info>
        <random>
            <some_tag>
            </foobar>
            <foo>
                <bar />
           </foo>
        </random>
    </data>
    <data>
        <name>EXAMPLE TWO</name>
        <info>
            <some_data>3</some_data>
            <more_data>4</more_data>
        </info>
        <random>
            <some_tag>
            </foobar>
            <foo>
                <bar />
           </foo>
        </random>
   </data>
</data>
<data>
    <from>C</from>
    <to>D</to>
    <data>
        <name>EXAMPLE</name>
        <info>
            <some_data>1</some_data>
            <more_data>2</more_data>
        </info>
        <random>
            <some_tag>
            </foobar>
            <foo>
                <bar />
           </foo>
        </random>
    </data>
 </data>'''
以及该虚拟数据的结果:

{(u'A', u'B'): [{'more_data': u'2',
                 'name': u'EXAMPLE ONE',
                 'some_data': u'1'},
                {'more_data': u'4',
                 'name': u'EXAMPLE TWO',
                 'some_data': u'3'}],
 (u'C', u'D'): [{'more_data': u'2', 'name': u'EXAMPLE', 'some_data': u'1'}]}

伟大的差不多就是这样了,我还想提取父级中每个可能的内部数据块。我已经更新了示例代码,使其更加清晰@迈克:我已经根据你编辑的输入数据更新了代码。请注意,最好返回原点并创建格式良好的XML树。我添加了一种将每个块存储在字典中的方法,您可以用现在应该相当简单的方法来检查它。
{(u'A', u'B'): [{'more_data': u'2',
                 'name': u'EXAMPLE ONE',
                 'some_data': u'1'},
                {'more_data': u'4',
                 'name': u'EXAMPLE TWO',
                 'some_data': u'3'}],
 (u'C', u'D'): [{'more_data': u'2', 'name': u'EXAMPLE', 'some_data': u'1'}]}