2013-10-09 12 views
8

Widziałem podobne pytania, ale rozwiązania, które widziałem, nie będą działać w następujący sposób. Jestem daleko od eksperta XPath. Potrzebuję tylko parsować jakiś HTML. Jak mogę wybrać tabelę, która następuje po nagłówku 2. Myślałem, że moje rozwiązanie poniżej powinno działać, ale najwyraźniej nie. Czy ktoś może mi pomóc?za pomocą xpath, aby wybrać element po innym

content = """<div> 
<p><b>Header 1</b></p> 
<p><b>Header 2</b><br></p> 
<table> 
<tr> 
    <td>Something</td> 
</tr> 
</table> 
</div> 
""" 

from lxml import etree 
tree = etree.HTML(content) 
tree.xpath("//table/following::p/b[text()='Header 2']") 

Odpowiedz

8

Trzeba użyć poniższy XPath 1.0 użyciu osi preceding.

//table[preceding::p[1]/b[.='Header 2']] 
+0

Ah, ok. Dziękujemy za kod i link do dokumentu. To jest pomocne. – jseabold

10

Niektóre alternatywy @ odpowiedź Arup za:

tree.xpath("//p[b='Header 2']/following-sibling::table[1]") 

wybrać pierwszą table rodzeństwo następującą po p zawierający nagłówek b zawierający "Nagłówek 2"

tree.xpath("//b[.='Header 2']/following::table[1]") 

wybrać pierwszą table w kolejność dokumentów po numerze b zawierającym "Nagłówek 2"

Zobacz XPath 1.0 specifications szczegółowe informacje na temat różnych osiach:

  • następujące zawiera wszystkie węzły w tym samym dokumencie jako węzła kontekstowego, które są po węzła kontekstowego w kolejności dokumentu, wykluczając dowolnych potomków i wykluczając węzły atrybutów i węzły przestrzeni nazw

  • Oś następująca dla rodzeństwa zawiera następujące wszystkie rodzeństwo węzła kontekstu; jeśli węzeł kontekstu jest węzłem węzeł atrybutu lub nazw, oś po-rodzeństwo jest pusty

Powiązane problemy