2015-08-20 4 views
2

В основном я использую urllib.request, чтобы вызвать вызов API для публикации, получить XML-файл взамен и попытаться разобрать его без везения.Parsing XML Object Python 3.4

Я пробовал использовать Element Tree и другие модули без везения. Я считаю, что может возникнуть проблема с самим объектом 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

Мой вопрос я не могу получить элемент дерева, чтобы разобрать это на всех. Я пробовал:

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

, а также различные другие предложения от https://docs.python.org/3/library/xml.etree.elementtree.html#module-xml.etree.ElementTree

ответ

2

ET.parse() метод требует либо расположение файла XML (в локальной файловой системе) или файл как объект, но ваш id_pubmed кажется строкой.

В этом случае вы должны использовать ET.fromstring(). Пример:

root = ET.fromstring(id_pubmed) 
+0

Это похоже на работу! Спасибо, я подозревал, что это проблема с методом, который я пытался использовать на моем объекте. – Sean

+0

Ahh, я попытался сделать это раньше, и это не сработало. Он работает сейчас! – Sean

+0

Рад, что он работает на вас. Я хотел бы попросить вас принять ответ, если его работа (щелкнув галочку на левой стороне), если ответ был вам полезен. Было бы полезно сообществу –