无法访问的xml订阅源条目

时间:2018-02-12 10:46:53

标签: python xml feedparser

我正在研究一个python应用程序,该应用程序应该在电话簿搜索api上发出请求并格式化接收到的数据。 这些条目作为xml feed发回,看起来就像底部的例子。

我正在使用feedparser来分割信息。

我正在努力解决的问题是提取电子邮件领域。 此信息包含在标记<tel:extra type="email">

我只能让它为最后一个额外条目获取“type”的值。

之前的标签和标签之间的内容无法访问。

有没有人对这种饲料有一些经验? 谢谢你的帮助。

API information

Python代码

import feedparser
  data = feedparser.parse(xml)
  entry = data.entries[0]
  print(entry.tel_extra)

XML示例

<?xml version="1.0" encoding="utf-8" ?>
    <feed xml:lang="de" xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:tel="http://tel.search.ch/api/spec/result/1.0/">
      <id>https://tel.search.ch/api/04b361c38a40dc3aab2355d79f221f86/5acc2bdfc4554dfd5a4bb10424cd597e</id>
      <title type="text">tel.search.ch API Search Results</title>
      <generator version="1.0" uri="https://tel.search.ch">tel.search.ch</generator>
      <updated>2018-02-12T03:00:00Z</updated>
      <link href="https://tel.search.ch/result.html?was=nestle&amp;wo=broc&amp;private=0" rel="alternate" type="text/html" />
      <link href="http://tel.search.ch/api/?was=nestle&amp;wo=broc&amp;private=0&amp;key=04b361c38a40dc3aab2355d79f221f86" type="application/atom+xml" rel="self" />
      <openSearch:totalResults>1</openSearch:totalResults>
      <openSearch:startIndex>1</openSearch:startIndex>
      <openSearch:itemsPerPage>20</openSearch:itemsPerPage>
      <openSearch:Query role="request" searchTerms="nestle broc" startPage="1" />
      <openSearch:Image height="1" width="1" type="image/gif">https://www.search.ch/audit/CP/tel/de/api</openSearch:Image>
      <entry>
        <id>urn:uuid:ca71838ddcbb6a92</id>
        <updated>2018-02-12T03:00:00Z</updated>
        <published>2018-02-12T03:00:00Z</published>
        <title type="text">Nestlé Suisse SA</title>
        <content type="text">Nestlé Suisse SA
        Fabrique de Broc
        rue Jules Bellet 7
        1636 Broc/FR
        026 921 51 51</content>
        <tel:nopromo>*</tel:nopromo>
        <author>
          <name>tel.search.ch</name>
        </author>
        <link href="https://tel.search.ch/broc/rue-jules-bellet-7/nestle-suisse-sa" title="Details" rel="alternate" type="text/html" />
        <link href="https://tel.search.ch/vcard/Nestle-Suisse-SA.vcf?key=ca71838ddcbb6a92" type="text/x-vcard" title="VCard Download" rel="alternate" />
        <link href="https://tel.search.ch/edit/?id=ca71838ddcbb6a92" rel="edit" type="text/html" />
        <tel:pos>1</tel:pos>
        <tel:id>ca71838ddcbb6a92</tel:id>
        <tel:type>Organisation</tel:type>
        <tel:name>Nestlé Suisse SA</tel:name>
        <tel:occupation>Fabrique de Broc</tel:occupation>
        <tel:street>rue Jules Bellet</tel:street>
        <tel:streetno>7</tel:streetno>
        <tel:zip>1636</tel:zip>
        <tel:city>Broc</tel:city>
        <tel:canton>FR</tel:canton>
        <tel:country>fr</tel:country>
        <tel:category>Schokolade</tel:category>
        <tel:phone>+41269215151</tel:phone>
        <tel:extra type="Fax Service technique">+41269215154</tel:extra>
        <tel:extra type="Fax">+41269215525</tel:extra>
        <tel:extra type="Besichtigung">+41269215960</tel:extra>
        <tel:extra type="email">maisoncailler@nestle.com</tel:extra>
        <tel:extra type="website">http://www.cailler.ch</tel:extra>
        <tel:copyright>Daten: Swisscom Directories AG</tel:copyright>
      </entry>
    </feed>

1 个答案:

答案 0 :(得分:1)

您可以查看BeautifulSoup。

from bs4 import BeautifulSoup
soup = BeautifulSoup(xml, 'xml')

soup.find("tel:extra", attrs={"type":"email"}).text
Out[111]: 'maisoncailler@nestle.com'