2016-09-27 8 views
0

Arxivからxmlを取得していて、すべてのArxivエントリを、lxmlライブラリを使用して読み込んだ後に解析したいとします。ここでは、100の記事のXMLファイルを取得するための私のコードです。lxml find要素を使用して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を解析する方法があるかどうかを知りたいれますfeedparserと同様の機能を持つ要素、すなわちtree.findall('entry')またはlxmlスクリプトを検索するときに{http://www.w3.org/2005/Atom}を指定します。

答えて

1

あなたは、名前空間を無視して、そのローカル名によって要素を一致させるために次のXPath式を使用することができます。

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

おかげでhar07!私は前にこのトリックを知らなかった。これは完璧に動作します。 – titipata

関連する問題