xml .etree.Elementree: Почему текст под тегом не идентифицирован - PullRequest
0 голосов
/ 25 марта 2020

Я написал этот скрипт, чтобы очистить соответствующую веб-страницу (в коде) в файл XML:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import requests

xml = open("import.xml", "w+")
xml.write(urlopen('http://mahmi.org/api/peptides/sourceProteins/241282699').read().decode('utf-8'))
xml.close()

Когда я открываю файл 'import. xml', я вижу данные есть; то есть начало файла выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><sourceProteins><sourceProtein><protein><id>2232238</id><sequence>MLLTNFQNFASLHAVPVAQIRAMEACPLPTEPIRCVIRELDVSKLTPDQLTQLNEVIDGYNKDLAFMIEELHKRANRRYCHGKNFIKWRGLLRAAHAVVHAALPPGMQKTHLLSKGGLQGKMWKTALEDACSTMDRYWRSIQVAVYCELRNKEFYSKLNDAEKYYVGCLLNNTGYLFFDMLDGKTPKPALPNKLKGKLSDPRNLCRKVRATVRRHSRRLPRHGVDRSCSLTTECYSVTQDSQGNQTISVITNTRGKRLLIPVKGKGRIGRTIKIVRDNGKFYLHIPLKTPVVPFEHIPRAPLAAGKATLHCTALDMGYTEVFTDDAGNFYGTELGKTLDAIGRKLDEVYRERNRWHARYRNEKDDKKKLNILRFNLGRKKLDAFETRARARVVCLVNKAINDIMAMRPADVYLIERFGQQFNFAGLSKKTRRKLSGWIRGTIEERFFFKASIHGAKAVYVPASYSSRRCPVCGYVHKTNRNGD</sequence><name>T2D-154A_GL0135792</name></protein><uniprotData><uniprotId>O66401</uniprotId><uniprotOrganism>Aquifex aeolicus (strain VF5)</uniprotOrganism><uniprotProtein>YZ05_AQUAE Putative...

Так что теперь я хочу прочитать в этом файле и, например, распечатать весь текст под тегом uniprotData:

enter image description here

Я написал этот код:

import xml.etree.ElementTree as ET
fileopen = open('import.xml').read()
root = ET.fromstring(fileopen)
for x in root.iter('uniprotData'):
        print(x.text)

Но вывод «Нет». Может кто-нибудь объяснить, почему это так?

1 Ответ

1 голос
/ 25 марта 2020

Как предлагается в комментариях, вам нужно повторить еще раз по x. Действительно, x имеет тип xml .etree.ElementTree.Element .

Код :

fileopen = open('import.xml').read()
root = ET.fromstring(fileopen)
for x in root.iter('uniprotData'):
    print(type(x))
    # <class 'xml.etree.ElementTree.Element'>

    for child in x:
        print("{:20} -> {}".format(child.tag,child.text))
        # uniprotId            -> O66401
        # uniprotOrganism      -> Aquifex aeolicus (strain VF5)
        # uniprotProtein       -> YZ05_AQUAE Putative transposase aq_aa05
        # uniprotGene          -> aq_aa05
...