解析 XML:使用 ElementTree 查找有趣的元素
Parsing XML: Finding Interesting Elements Using ElementTree
我正在使用 urllib 和 ElementTree 来解析来自 pubmed 的 XML API 调用。
这方面的一个例子是:
#Imports Modules that can send requests to URLs
#Python Version 3.4 Using IEP (Interactive Editor for Python) as IDE
import urllib.request
import urllib.parse
import re
import xml.etree.ElementTree as ET
from urllib import request
#Obtain API Call and assign Element Object to Root
id_request = urllib.request.urlopen('http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=1757056')
id_pubmed = id_request.read()
root = ET.fromstring(id_pubmed)
我现在已经能够使用 Element Tree 将数据从 ET.fromstring 导入到对象根目录。我现在的问题是,我无法从此对象中找到有趣的元素。
我指的是:
https://docs.python.org/2/library/xml.etree.elementtree.html
我的 XML 格式如下:
http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=1757056
我试过:
#Parse Attempts. Nothing returned.
for author in root.iter('Author'):
print (author.attrib)
以及
#No Return for author
for author in root.findall('Id'):
author = author.find('author').text
print (author)
.attrib
方法 returns 标签内的值。我认为您可能想改用 .tag
或 .text
。我不确定您要从这棵树中提取什么数据,但您也可以遍历 author
值。
编辑:
那么 esummaryResult 标签似乎毫无意义,除非您有更多的 DocSum 标签。但是您想要的信息在您的 .text
值中。尝试打印 author.tag
,也许您可以检查当前正在迭代的内容的返回值。
尝试按标签迭代
for author in root.iter('Item'):
if author.attrib['Name'] == 'Author':
print("Success")
或者:
author_list = [x for x in root.iter('Item') if x.attrib['Name'] == 'Author']
不知道能不能按属性迭代
我正在使用 urllib 和 ElementTree 来解析来自 pubmed 的 XML API 调用。
这方面的一个例子是:
#Imports Modules that can send requests to URLs
#Python Version 3.4 Using IEP (Interactive Editor for Python) as IDE
import urllib.request
import urllib.parse
import re
import xml.etree.ElementTree as ET
from urllib import request
#Obtain API Call and assign Element Object to Root
id_request = urllib.request.urlopen('http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=1757056')
id_pubmed = id_request.read()
root = ET.fromstring(id_pubmed)
我现在已经能够使用 Element Tree 将数据从 ET.fromstring 导入到对象根目录。我现在的问题是,我无法从此对象中找到有趣的元素。
我指的是: https://docs.python.org/2/library/xml.etree.elementtree.html 我的 XML 格式如下: http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=1757056
我试过:
#Parse Attempts. Nothing returned.
for author in root.iter('Author'):
print (author.attrib)
以及
#No Return for author
for author in root.findall('Id'):
author = author.find('author').text
print (author)
.attrib
方法 returns 标签内的值。我认为您可能想改用 .tag
或 .text
。我不确定您要从这棵树中提取什么数据,但您也可以遍历 author
值。
编辑:
那么 esummaryResult 标签似乎毫无意义,除非您有更多的 DocSum 标签。但是您想要的信息在您的 .text
值中。尝试打印 author.tag
,也许您可以检查当前正在迭代的内容的返回值。
尝试按标签迭代
for author in root.iter('Item'):
if author.attrib['Name'] == 'Author':
print("Success")
或者:
author_list = [x for x in root.iter('Item') if x.attrib['Name'] == 'Author']
不知道能不能按属性迭代