2016-10-22 18 views
3

獲得元素我有一個XML像下面下面的XPath從XML

<li class="expandSubItem"> 
    <span class="expandSubLink">Popular Neighborhoods</span> 
    <ul class="secondSubNav" style="top:-0.125em;"> 
     <li class="subItem"> 
      <a class="subLink" href="/Hotels-g187147-zfn7236765-Paris_Ile_de_France-Hotels.html">Quartier Latin Hotels</a> 
     </li> 
    </ul> 
</li> 
<li class="expandSubItem"> 
    <span class="expandSubLink">Popular Paris Categories</span> 
    <ul class="secondSubNav" style="top:-0.125em;"> 
     <li class="subItem"> 
      <a class="subLink" href="/HotelsList-Paris-Cheap-Hotels-zfp10420.html">Paris Cheap Hotels</a> 
     </li> 
    </ul> 
</li> 

我想在「熱門巴黎類別」的所有鏈接。我使用了類似//li//a/@href/following::span[text()='Popular Singapore Categories']的東西,但沒有得到任何結果。任何想法如何得到正確的結果?這是我寫的python代碼片段。

t_url = 'https://www.tripadvisor.com/Tourism-g187147-Paris_Ile_de_France-Vacations.html' 
page = requests.get(t_url, timeout=30) 
tree = html.fromstring(page.content) 

links = tree.xpath('//li[span="Popular Paris Categories"]//a/@href') 
print links 
+0

'// li [span ='熱門巴黎分類']/ul/li/a/@ href' – har07

+0

它沒有用,因爲「span」和「ul」在xpath的同一層。 –

+1

是的,'span'和'ul'處於同一水平,並不重要。查看演示(或者在您喜歡的任何XPath測試器中嘗試它):http://xpatheval.apphb.com/3849byFx2 – har07

回答

3

這是一種可能的方式:

//li[normalize-space(span)="Popular Paris Categories"]//a/@href 

注意如何normalize-space()用於從span內容刪除尾隨的空間。這就是爲什麼我最初在評論中提出的XPath不適用於您的實際HTML。

+0

是的,你是對的。 「熱門巴黎類別」之後有一條新線。非常感謝您的幫助。 –

0

像這樣的事情也許

//span[text()='Popular Paris Categories']/following-sibling::ul//a/@href 
+0

它沒有工作。 –

+0

@AgusSanjaya它應該工作(請參閱演示http://xpatheval.apphb.com/8524GG-JA)。你在做什麼environent? (*什麼xpath引擎等*) –

+0

我正在使用python。檢查上面的代碼。 –