Поиск записи xml с BeautifulSoup - PullRequest
1 голос
/ 05 мая 2020

Я знаю, что к этому топу много вопросов c .. Но я не могу ответить этим на свой вопрос ..

Кто-нибудь может мне помочь, как это сделать?

Мой xml файл выглядит так:

...
<object>
<acronym>Mmachc</acronym>
<alias-tags>1810037K07Rik RP23-177C18.3</alias-tags>
<chromosome-id>49</chromosome-id>
<ensembl-id nil="true"/>
<entrez-id>67096</entrez-id>
<genomic-reference-update-id>491928275</genomic-reference-update-id>
<homologene-id>12082</homologene-id>
<id>42939</id>
<legacy-ensembl-gene-id nil="true"/>
<name>
methylmalonic aciduria cblC type, with homocystinuria
</name>
<organism-id>2</organism-id>
<original-name>
</original-name>
<original-symbol>Mmachc</original-symbol>
<reference-genome-id nil="true"/>
<sphinx-id>95240</sphinx-id>
<version-status>no change</version-status>
</object>
<object>
...

Итак, если я теперь хочу найти объект, содержащий, например, entrez-id 67096, чтобы узнать, какой у него акроним ... Сначала я попробовал:

url = "http://api.brain-map.org/api/v2/data/query.xml?num_rows=10000&start_row=10001&&criteria=model::Gene,rma::criteria,products[abbreviation$eq%27Mouse%27]"
req = requests.get(url)
doc = req.text
root = etree.XML(doc)
soup = BeautifulSoup(doc)

dict1 = {}

for object in soup.find_all('object'):
    dict1[object.find('entrez-id') == 67096] 

Результатом будет KeyError: False ..

Кто-нибудь может мне с этим помочь? Также, если я попытаюсь найти его как строку '67096', я получу ключевую ошибку false ..

1 Ответ

1 голос
/ 05 мая 2020

Вам действительно не нужен beautifulsoup; просто попробуйте что-нибудь вроде:

target = root.xpath('//entrez-id[.="67096"]/preceding-sibling::acronym/text()')
target[0]

Вывод:

'Mmachc'
...