2016-09-27 2 views
0

Я извлекаю xml из Arxiv, и я хочу проанализировать все записи Arxiv после его чтения с помощью библиотеки lxml. Вот мой код для захвата XML-файла из 100 статей.Использовать элемент поиска lxml для анализа Arxiv XML из API

import urllib 
from lxml import etree 

start_index = 0 
results_per_iteration = 100 
base_url = 'http://export.arxiv.org/api/query?' 
search_query = 'cat:cs.CV+OR+cat:cs.LG+OR+cat:cs.CL+OR+cat:cs.NE+OR+cat:stat.ML' 
query = 'search_query=%s&sortBy=lastUpdatedDate&start=%i&max_results=%i'\ 
    % (search_query, start_index, start_index + results_per_iteration) 

response = urllib.request.urlopen(base_url + query).read() # python 3.x 
# response = urllib.urlopen(base_url + query).read() # python 2.x 
tree = etree.fromstring(response) 

Теперь я должен сделать следующее, чтобы найти все записи из xml.

e_ = tree.findall('{http://www.w3.org/2005/Atom}entry') 

И для того, чтобы найти id, я должен сделать следующий

print(e_.find('{http://www.w3.org/2005/Atom}id').text) 

Вопрос, я хочу знать, если есть способ, чтобы разобрать этот XML, где мы не имеем для получения {http://www.w3.org/2005/Atom} при поиске элементов, то есть tree.findall('entry') или lxml скрипт, который имеет некоторую функциональность, которая похожа на feedparser.

ответ

1

Вы можете использовать следующее выражение XPath для соответствия элемента местного именем- его , не обращая внимания на пространство имен:

e_ = tree.xpath('*[local-name()="entry"]') 
+0

Благодаря har07! Раньше я этого не знал. Это работает отлично. – titipata

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