用Python解析AlexaXML

用Python解析AlexaXML,python,xml,xml-parsing,elementtree,alexa,Python,Xml,Xml Parsing,Elementtree,Alexa,我有一个非常类似的问题: 我想知道如何解析第二个DataUrl。这意味着我想获取TrafficData下的DataUrl变量,而不是ContentData下的变量。(获取people.com而不是google.com) 我也在使用lxml,其数据与他描述的完全相同 代码如下: <aws:UrlInfoResponse xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/"> <aws:Response xmlns:aw

我有一个非常类似的问题:

我想知道如何解析第二个
DataUrl
。这意味着我想获取
TrafficData
下的
DataUrl
变量,而不是
ContentData
下的变量。(获取
people.com
而不是
google.com

我也在使用lxml,其数据与他描述的完全相同

代码如下:

<aws:UrlInfoResponse xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/">
  <aws:Response xmlns:aws="http://awis.amazonaws.com/doc/2005-07-11">
    <aws:OperationRequest>
      <aws:RequestId>ccf3f263-ab76-ab63-db99-244666044e85</aws:RequestId>
    </aws:OperationRequest>
    <aws:UrlInfoResult>
      <aws:Alexa>
        <aws:ContentData>
          <aws:DataUrl type="canonical">google.com/</aws:DataUrl>
          <aws:SiteData>
        <aws:Title>Google</aws:Title>
            <aws:Description>Enables users to search the world's information, including webpages, images, and videos. Offers unique features and search technology.</aws:Description>
            <aws:OnlineSince>15-Sep-1997</aws:OnlineSince>
          </aws:SiteData>
          <aws:LinksInCount>3453627</aws:LinksInCount>
        </aws:ContentData>
        <aws:TrafficData>
          <aws:DataUrl type="canonical">people.com/</aws:DataUrl>
          <aws:Rank>1</aws:Rank>
        </aws:TrafficData>
      </aws:Alexa>
    </aws:UrlInfoResult>
    <aws:ResponseStatus xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/">
      <aws:StatusCode>Success</aws:StatusCode>
    </aws:ResponseStatus>
  </aws:Response>
</aws:UrlInfoResponse>

ccf3f263-ab76-ab63-db99-244666044e85
谷歌网站/
谷歌
使用户能够搜索世界信息,包括网页、图像和视频。提供独特的功能和搜索技术。
1997年9月15日
3453627
人民网/
1.
成功
我将答案作为一个整体进行了编辑

作为对您评论的回复,您所需要做的就是更改
xpath

下面的工作示例(来自链接问题)返回
google.com/

from lxml import etree

xmlstr = """
<?xml version="1.0"?>
<aws:UrlInfoResponse xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/">
  <aws:Response xmlns:aws="http://awis.amazonaws.com/doc/2005-07-11">
    <aws:OperationRequest>
      <aws:RequestId>ccf3f263-ab76-ab63-db99-244666044e85</aws:RequestId>
    </aws:OperationRequest>
    <aws:UrlInfoResult>
      <aws:Alexa>
        <aws:ContentData>
          <aws:DataUrl type="canonical">google.com/</aws:DataUrl>
          <aws:SiteData>
            <aws:Title>Google</aws:Title>
            <aws:Description>Enables users to search the world's information, including webpages, images, and videos. Offers unique features and search technology.</aws:Description>
            <aws:OnlineSince>15-Sep-1997</aws:OnlineSince>
          </aws:SiteData>
          <aws:LinksInCount>3453627</aws:LinksInCount>
        </aws:ContentData>
        <aws:TrafficData>
          <aws:DataUrl type="canonical">googly.com/</aws:DataUrl>
          <aws:Rank>1</aws:Rank>
        </aws:TrafficData>
      </aws:Alexa>
    </aws:UrlInfoResult>
    <aws:ResponseStatus xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/">
      <aws:StatusCode>Success</aws:StatusCode>
    </aws:ResponseStatus>
  </aws:Response>
</aws:UrlInfoResponse>
"""

doc = etree.fromstring(xmlstr.strip())


namespaces = {"aws": "http://awis.amazonaws.com/doc/2005-07-11"}
texts = doc.xpath("//aws:TrafficData/aws:DataUrl/text()", namespaces=namespaces)
print texts[0]
从lxml导入etree
xmlstr=”“”
ccf3f263-ab76-ab63-db99-244666044e85
谷歌网站/
谷歌
允许用户搜索世界信息,包括网页、图像和视频。提供独特的功能和搜索技术。
1997年9月15日
3453627
谷歌/
1.
成功
"""
doc=etree.fromstring(xmlstr.strip())
名称空间={“aws”:http://awis.amazonaws.com/doc/2005-07-11"}
text=doc.xpath(//aws:TrafficData/aws:DataUrl/text(),名称空间=名称空间)
打印文本[0]
我需要做:

namespaces = {"aws": "http://awis.amazonaws.com/doc/2005-07-11"}
texts = doc.xpath("//aws:TrafficData/aws:DataUrl/text()", namespaces=namespaces)
print texts[0]

如果我需要删除问题并编辑链接的问题,请告诉我,我在这里很新。您编写的代码为我提供了
ContentData
下的第一个
DataUrl
。我想在
TrafficData
下找到一个。(我知道我可以转到
文本[1]
,但一般来说这不是一个好方法。@duFFChange xpath以声明您想要在
TrafficData
下的xpath,请参见上文。我从未听说过使用这样的索引是不好的做法,尤其是对于不太可能定期更改的API响应。