2014-11-03 4 views
0

Я работаю над скриптом Python (изменен с here и приведен ниже), чтобы найти на Pubmed количество документов из определенного университета и загрузить принадлежность сотрудников. Если я запустил код, а не присоединяюсь, я получаю <Element 'Affiliation' at 0x106ea7e50>. Вы знаете, как это исправить? И что мне делать, чтобы загрузить принадлежность для всех авторов? Благодаря!Присоединение от Pubmed через Python

import urllib, urllib2, sys 
import xml.etree.ElementTree as ET 

def chunker(seq, size): 
    return (seq[pos:pos + size] for pos in xrange(0, len(seq), size)) 

query = '(("University of Copenhagen"[Affiliation]))# AND ("1920"[Publication Date] : "1930"[Publication Date]))' 

esearch = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&mindate=2001&maxdate=2010&retmode=xml&retmax=10000000&term=%s' % (query) 
handle = urllib.urlopen(esearch) 
data = handle.read() 

root = ET.fromstring(data) 
ids = [x.text for x in root.findall("IdList/Id")] 
print 'Got %d articles' % (len(ids)) 

for group in chunker(ids, 100): 
    efetch = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?&db=pubmed&retmode=xml&id=%s" % (','.join(group)) 
    handle = urllib.urlopen(efetch) 
    data = handle.read() 

    root = ET.fromstring(data) 
    for article in root.findall("PubmedArticle"): 
     pmid = article.find("MedlineCitation/PMID").text 
     year = article.find("MedlineCitation/Article/Journal/JournalIssue/PubDate/Year") 
     if year is None: year = 'NA' 
     else: year = year.text 
     aulist = article.findall("MedlineCitation/Article/AuthorList/Author") 
     affiliation = article.find("MedlineCitation/Article/AuthorList/Author/Affiliation") 
     print pmid, year, len(aulist), affiliation 

ответ

2

Причина, это происходит в том, что affiliation объект относится к XML-элемент, не кусок текста. Если строка, которую вы хотите, содержится в пределах стоимости, например, так:

<affiliation> 
    your_affiliation_text 
</affiliation> 

вы хотите напечатать affiliation.text.

Если строка, которую вы хотели содержится в атрибуте, например, так:

<affiliation your_attribute_name="your_affiliation"> 

вы хотите использовать affiliation.attrib[name].

Смежные вопросы