当前位置: 首页 > 知识库问答 >
问题:

从美丽的汤xml中提取属性“值”

裴彦
2023-03-14

我试图提取搜索关键字从SOAP xml模式与美丽的汤,不知道如何提取值属性。

我已经尝试使用soap.find_all但它不会让我提取value属性。

这是我到目前为止所拥有的:

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']

这就是我有问题的地方。根据美丽的汤留档,这应该输出所有的“值”属性。

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回溯(最近一次调用)在----

~/anaconda3/envs/py37/lib/python3.7/site-pack/bs4/getitem1069""tag[key]返回标签的'key'属性的值,1070并抛出一个异常,如果它不存在。""-

键错误:“值”

共有2个答案

白光耀
2023-03-14

只需使用值属性选择器

import requests 
from bs4 import BeautifulSoup as bs

soap = requests.get('http://ecp.iedadata.org/soap_search_schema.xsd')
soapXML = soap.content.decode("utf-8")
soapSoup =bs(soapXML, "xml")
enumeration_values = [item['value'] for item in  soapSoup.select("[value]") if item['value']]
print(enumeration_values)

稍微快一点的是使用类型选择器

import requests 
from bs4 import BeautifulSoup as bs

soap = requests.get('http://ecp.iedadata.org/soap_search_schema.xsd')
soapXML = soap.content.decode("utf-8")
soapSoup =bs(soapXML, "xml")
enumeration_values = [item['value'] for item in  soapSoup.select("enumeration") if item['value']]
print(enumeration_values)
薄腾
2023-03-14

只需将1级[value]替换为:

for i in level1:
    if type(i) is not bs4.element.NavigableString:
        data = i.contents
        for k in data[1]:
            if type(k) is not bs4.element.NavigableString:
                print(k['value'])

输出:

alteration
igneous
metamorphic
notfound
ore
sedimentary
vein
xenolith
 类似资料:
  • 问题内容: 我正在尝试从Google搜索结果中提取链接。检查元素告诉我,我感兴趣的部分具有“ class = r”。第一个结果如下所示: 要提取“ href”,我要做: 但是我意外地得到: 我想要的地方: 属性“ ping”似乎使它感到困惑。有任何想法吗? 问题答案: 发生了什么? 如果您打印响应内容(即),则会看到您得到的HTML完全不同。页面源和响应内容不匹配。 因为内容是动态加载的,所以 不

  • 我试图使用美丽的汤抓取newegg的产品名称、描述、价格和图像。我有以下bs4.element.标签类型,我想从标签中提取“src”链接。以下是我的标签: 我怎样才能提取 从这个标签?我试过了 但我收到了Keyerror。

  • 我想从一个网站上提取日期。我想知道新闻文章发表的日期/时间。这是我的代码: 从bs4导入组导入请求 您也可以尝试使用此网站: 请查看,这是我想浏览的网站,我想获取的日期/时间是: 这是我的css选择器,它只给我段落,但日期/时间不在段落中,而是在字体标记中。 但当我将css选择器设置为: 我得到[] 是否可以提取不在任何子标记中的数据?

  • 我希望从< code>div内的标题和< code >内的文本中提取文本字符串 我可以用<code>汤得到标题。h1</code>,但我想获得特定于div<code>中的<code>h1</code> 超文本标记语言:

  • 我试图抓取这个网站:https://www.senate.gov/general/contact_information/senators_cfm.cfm 我的代码: 问题是它实际上并没有到达网站。我在soup var中得到的HTML根本不是正确网页中的HTML。 我不知道从这里去哪里!任何和所有的帮助都将不胜感激。

  • 问题内容: 为什么这不返回标签和中间的东西?它什么也不返回。我知道一个事实,因为我正盯着它 也行不通。 ( 编辑: 我发现BeautifulSoup无法正确解析我的页面,这可能意味着我尝试解析的页面在SGML或其他格式中未正确格式化) 问题答案: 您应该发布示例文档,因为代码可以正常工作: 在s内部查找s也可以: