2017-09-15 1 views
0

someonesライブラリを書き換えてリクエストで返されたxmlを解析しようとしています。しかし、彼らは私が慣れていない方法でlxmlを使います。私はそれがデータを見つけるために正規表現を使用していると信じて、ライブラリのほとんどの作品を提供していますが、サイトが解析されているとき、リスト構造のファイルIDを持っていません。 Essnetially私はページを取得し、私はhrefの競技者の番号と一致するIDを探しています。xpathでxpathがhrefに基づいてID番号を見つける

lst_group_activity = parser.xpath(".//li[substring(@id, 1, 8)='Activity']") 

は完全にはなく、すべての活動のために、すべてのリスト項目を提供します。だから私はちょうどアスリート567377.

</div> 
</a></div> 
<ul class='list-entries'> 
<li class='entity-details feed-entry' id='Activity-123120999590'> 
<div class='avatar avatar-athlete avatar-default'> 
<a class='avatar-content' href='/athletes/567377' > 
</a> 
</div> 

</li> 
<li class='entity-details feed-entry' id='Activity-16784940202'> 
<div class='avatar avatar-athlete avatar-default'> 
<a class='avatar-content' href='/athletes/5252525'> 
</a> 
</div> 

コードのidを取得したいと言います。私は右の選手に関連するものだけを持っていたい。ライブラリは@hrefを使って右のアスリートを選択するために以下を使用します。

lst_athlethe_act_in_group_activity = parser.xpath(".//li[substring(@id, 1, 8)='Activity']/*[@href='/athletes/"+athlethe_id+"']/..") 

しかし、これは決してうまくいかないようです。それは活動を見つけるが、それらをすべて投げ捨てる。

これを行うには良い方法はありますか?正しい方向に私を指し示して次の要素に関連付けることができるチュートリアル。

答えて

0

href属性を持つ要素は、li要素のimmedite子ではないため、xpathが失敗しています。あなたは、一致している:

.//li/*[@href="..."] 

をあなたがしたい:

.//li/div/a[@href="..."] 

(あなたは別の要素がhref属性が含まれているかもしれないと思う場合は、*代わりのaに一致する可能性があり、あなたが考える場合は、.//li//a[@href="..."]照合することができますa要素へのパスは、必ずしもli/div/aであるとは限りません。

parser.xpath(".//li[substring(@id, 1, 8)='Activity']/div/a[@href='/athletes/%s']/../.." % '5252525') 

しかし、あなたはまた、../..なしのことを書くことができます:

parser.xpath(".//li[substring(@id, 1, 8)='Activity' and div/a/@href='/athletes/%s']" % '5252525') 
ので li要素を見つけるため

関連する問題