用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响应。