【问题标题】:Xml text extracting pythonxml文本提取python
【发布时间】:2015-10-10 16:27:47
【问题描述】:

这是 API 网址 -

https://api.dynadot.com/api3.xml?key=26T8F9U8t8Fj6e8m6172p80849H8GN8i6m8O7U7pC7u&command=search&domain0=000.com

当我使用 Http 请求时

requests.get('https://api.dynadot.com/api3.xml?key=26T8F9U8t8Fj6e8m6172p80849H8GN8i6m8O7U7pC7u&command=search&domain0=000.com')

我得到 XML 响应:-

<Results><SearchResponse><SearchHeader><SuccessCode>0</SuccessCode><DomainName>000.com</DomainName><Status>success</Status><Available>no</Available></SearchHeader></SearchResponse></Results>

我想提取每个元素,我该怎么做,我不想使用正则表达式库。我正在尝试使用 lxml 库,但它不起作用:-

url = 'https://api.dynadot.com/api3.xml?key=26T8F9U8t8Fj6e8m6172p80849H8GN8i6m8O7U7pC7u&command=search&domain0='+each1
r = requests.get(url)
print r.text
source = html.fromstring(r.content)
available = source.xpath('/available/text()')
print available
print "For %s availability is %r" %(each1, available)

请大家帮忙看看

【问题讨论】:

    标签: xml python-2.7 parsing xpath lxml


    【解决方案1】:

    请注意,XML 和 XPath 都区分大小写,因此在这种情况下,'available' 永远不会与 'Available' 相同.

    要修复的另一件事是 XPath 开头的单斜杠。将其替换为双斜杠(descendant-or-self 轴的缩写),如 //Available/text(),或使用从根到目标元素 /Results/SearchResponse/SearchHeader/Available/text() 的完整路径。

    完整的工作演示示例:

    from lxml import etree
    
    content = '''<Results>
       <SearchResponse>
          <SearchHeader>
             <SuccessCode>0</SuccessCode>
             <DomainName>000.com</DomainName>
             <Status>success</Status>
             <Available>no</Available>
          </SearchHeader>
       </SearchResponse>
    </Results>'''
    source = etree.fromstring(content)
    available = source.xpath('//Available/text()')
    print(available)
    

    输出:

    ['no']
    

    【讨论】:

    • 成功了。谢谢.. 但是 html.fromstring 和 etree.fromstring 有什么区别?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多