2016-09-27 61 views
0

我從Arxiv中獲取xml,我想在使用lxml庫讀取它之後解析所有Arxiv條目。這裏是我的代碼來抓取100篇文章的XML文件。使用lxml查找元素從API中解析Arxiv XM​​L

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