【发布时间】:2019-10-15 14:17:32
【问题描述】:
我正在尝试使用 BeautifulSoup 从 SOAP xml schema 中提取搜索关键字,但无法弄清楚如何提取值属性。
我尝试过使用soap.find_all,但它不会让我提取值属性。
这是我目前所拥有的:
soap = requests.get('http://ecp.iedadata.org/soap_search_schema.xsd')
soapXML = soap.content.decode("utf-8")
soapSoup = BeautifulSoup(soapXML, "xml")
level1 = soapSoup.findAll('xs:attribute', {'name':'level1'})[0]
level1['value']
这就是我有问题的地方。根据 BeautifulSoup 文档,这应该输出所有“值”属性。
print(level1):
<xs:attribute name="level1" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=""/>
<xs:enumeration value="alteration"/>
<xs:enumeration value="igneous"/>
<xs:enumeration value="metamorphic"/>
<xs:enumeration value="notfound"/>
<xs:enumeration value="ore"/>
<xs:enumeration value="sedimentary"/>
<xs:enumeration value="vein"/>
<xs:enumeration value="xenolith"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
如您所见,我试图从所有 xs:enumeration 标记中的 value 属性中获取文本。最终结果将是 level1 的搜索词列表。即:
(蚀变、火成岩、变质、未发现、矿石、沉积、矿脉、捕虏体)
我不能只调用 xs:enumeration 标签,因为有多个关键字(即 level2、level3、SampleType... 等)并且每个关键字都有不同的 xs:enumeration 值。
这是最后一行的错误(level1['value'])
KeyError Traceback(最近一次调用最后一次) 在 ----> 1 level1test['value']
~/anaconda3/envs/py37/lib/python3.7/site-packages/bs4/element.py in getitem(self, key) 1069 """tag[key] 返回标签的 'key' 属性的值, 1070,如果不存在则抛出异常。""" -> 1071 返回 self.attrs[key] 1072 1073 def iter(自我):
KeyError: '值'
【问题讨论】:
标签: xml python-3.x beautifulsoup