【问题标题】:Parsing XML Object Python 3.4解析 XML 对象 Python 3.4
【发布时间】:2015-08-20 14:31:08
【问题描述】:

基本上我正在做的是使用 urllib.request 对 pubmed 进行 API 调用,接收一个 XML 文件作为回报,并试图解析它但没有运气。

我尝试过使用元素树和其他模块,但没有成功。我认为 XML 对象本身可能存在问题。

#Imorting URL Request Modules for API Calls
#Also importing ElemenTree as it seems to be best for XML parsing

import urllib.request 
import urllib.parse 
import re 
import xml.etree.ElementTree as ET 
from urllib import request 

#Now I can make the API call.  
id_request = urllib.request.urlopen('http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=17570568')

#id_request will be an object that I'm not sure I understand?  
#id_request Returns: "<http.client.HTTPResponse object at 0x0000000003693FD0>"
#Let's now read this baby in XML format!
id_pubmed = id_request.read()

#If I look at the id_pubmed object, I not have the XML file I want to parse.

您可以在此处查看 XML 文件 id_pubmed 调用/打印的内容:http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=17570568

我的问题是我根本无法让 Element Tree 解析它。我试过了:

tree = ET.parse(id_pubmed)
root = tree.getroot()

以及来自https://docs.python.org/3/library/xml.etree.elementtree.html#module-xml.etree.ElementTree的各种其他建议

【问题讨论】:

    标签: python xml api python-3.x elementtree


    【解决方案1】:

    ET.parse() 方法需要 xml 文件的位置(在本地文件系统上)或类似 object 的文件,但您的 id_pubmed 似乎是一个字符串。

    在这种情况下,您应该使用 ET.fromstring() 。示例 -

    root = ET.fromstring(id_pubmed)
    

    【讨论】:

    • 这似乎有效!谢谢,我怀疑是我尝试在对象上使用的方法有问题。
    • 啊,我之前尝试过这样做,但没有成功。现在可以了!
    • 很高兴它为您工作。我想请您接受答案,如果它有效(通过单击左侧的勾号),如果答案对您有帮助。这将对社区有所帮助
    猜你喜欢
    • 2021-08-25
    • 1970-01-01
    • 2014-07-30
    • 2011-07-28
    • 2012-07-06
    • 2015-09-12
    • 2021-05-16
    • 1970-01-01
    • 2016-12-02
    相关资源
    最近更新 更多