【问题标题】:Extracting tag information with beautifulsoup and python用beautifulsoup和python提取标签信息
【发布时间】:2012-05-18 06:49:27
【问题描述】:

假设我有一些类似的 xml

<item name=bread weight="5" edible="yes">
<body> some blah </body>
<item>

<item name=eggs weight="5" edible="yes">
<body> some blah </body>
<item>

<item name=meat weight="5" edible="yes">
<body> some blah </body>
<item>

我想用漂亮的汤将每个项目的名称存储在一个列表中

这是目前的尝试:

names =list()

for c in soup.findAll("item"):
    #get name from the tag
        names.append(name i got from tag)

这种方法非常适合提取标签之间的文本。

我尝试复制用于提取链接的方法&lt;a href="www.blah.com"&gt;,但它似乎不起作用。

如何将名称信息存储在列表中? (其他列表包含正文,因此出于关联性原因,索引必须一致)。

非常感谢

【问题讨论】:

    标签: python xml parsing beautifulsoup


    【解决方案1】:

    使用dict(item.attrs).get('name') 获取名称。

    您遇到了问题,因为 &lt;item&gt; 应该是一个结束标签,但它是一个开始标签,因此您得到 6 个匹配项而不是 3 个。如果您对文本有任何控制权,请使用结束标签来避免这种情况.

    这是完整的 sn-p 按预期工作:

    names = list()
    
    for item in soup.findAll('item'):
        name = dict(item.attrs).get('name')
        if name is not None:
            names.append(name)
    

    【讨论】:

    • 嗨,感谢@bossylobster 的帮助:这是一个错字,没有把结束标签放进去。我可以省略“如果名字不是无:”当我尝试打印出名字[0]时说“没有”。你知道这是为什么吗?
    • if name is not None 行用于说明dict(item.attrs).get('name') 返回None 的情况。这恰好发生在 'name' 不是 attrs 字典中的键时。如果您只有几件物品,您可以手动检查它们并找出发生这种情况的原因。
    猜你喜欢
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2021-10-07
    • 1970-01-01
    相关资源
    最近更新 更多