首页 > 解决方案 > 使用漂亮的汤解析 SGML

问题描述

以下是示例内容:-

<WKEXT-META-ATTRS>
<WKEXT-META-ATTR NAME="uri" VALUE="http://sample.com/ceres/wk-us/Concept/i8148" DATA-TYPE="OTHER"></WKEXT-META-ATTR></WKEXT-META-ATTRS></WKEXT-META-OBJECT>
<WKEXT-META-OBJECT NAME="UNIONREPINFO" ID="ext-met-0005" PUBLISHER-URI="http://wk-us.com/meta/publishers/#CCH">
<WKEXT-META-ATTRS>
<WKEXT-META-ATTR NAME="UnionRep" VALUE="Jim Gookins" DATA-TYPE="OTHER"></WKEXT-META-ATTR></WKEXT-META-ATTRS></WKEXT-META-OBJECT>
<WKEXT-META-OBJECT NAME="TOPICALSUBJECTINFO" ID="ext-met-0006" PUBLISHER-URI="http://sample.com/meta/publishers/#CCH">
<WKEXT-META-ATTRS>
<WKEXT-META-ATTR NAME="uri" VALUE="http://sample.com/ceres/sample/Concept/i8173" DATA-TYPE="OTHER"></WKEXT-META-ATTR></WKEXT-META-ATTRS></WKEXT-META-OBJECT>
<WKEXT-META-OBJECT NAME="TOPICALSUBJECTINFO" ID="ext-met-0007" PUBLISHER-URI="http:/sample/meta/publishers/#CCH">

我想提取uri的VALUE——“http://sample.com/ceres/wk-us/Concept/i8141

我目前正在尝试使用以下代码:-

with open ("sample.sgm","r")as f:
    contents =f.read()
    soup = BeautifulSoup(contents, 'lxml')
    s = soup.find('wkext-meta-attr').attrs
    #for a in s:
    #    t = a.attrs
    #    for key,value in t.items():
    #        alias_text.append(t['normval'])
    #print(alias_text)
    #df = DataFrame(alias_text, columns=['arbitratorname'])
    #s_topic=soup.find('WKEXT-META-ATTRS'=
    print(s)

我无法弄清楚如何获得确切的价值。任何帮助都感激不尽!!!

标签: python-3.xbeautifulsoupdata-processingsgmlreader

解决方案


如果要检索 each 的值wkext-meta-attr,可以使用`.findAll() 方法,然后循环遍历每个元素。检查以下代码是否满足您的任务:

from bs4 import BeautifulSoup

with open ("sample.sgm","r")as f:
    contents =f.read()
    soup = BeautifulSoup(contents, 'html.parser')
    meta_attrs = soup.findAll('wkext-meta-attr')
    
for meta_attr in meta_attrs:
    print(meta_attr['value'])

推荐阅读