Próbuję uzyskać linki ze strony z xpath. Problem polega na tym, że chcę tylko linków wewnątrz tabeli, ale jeśli zastosuję wyrażenie xpath na całej stronie, przechwycę linki, których nie chcę.Python: Używanie xpath lokalnie/na konkretnym elemencie
Na przykład:
tree = lxml.html.parse(some_response)
links = tree.xpath("//a[contains(@href, 'http://www.example.com/filter/')]")
Problem polega na tym, że odnosi się zwrot do całego dokumentu. I znajduje się element, którego chcę, na przykład:
tree = lxml.html.parse(some_response)
root = tree.getroot()
table = root[1][5] #for example
links = table.xpath("//a[contains(@href, 'http://www.example.com/filter/')]")
ale to wydaje się być przeprowadzenie kwerendy w całym dokumencie, jak również, jak ja nadal jestem przechwytywania linki poza stół. This page mówi, że "Kiedy xpath() jest używane w elemencie, wyrażenie XPath jest oceniane względem elementu (jeśli jest względne) lub względem drzewa głównego (jeśli jest bezwzględne):". Więc to, co używam jest wyrażeniem absolutnym i muszę go uczynić względnym? Czy to to?
Zasadniczo, w jaki sposób mogę filtrować tylko te elementy, które istnieją w tej tabeli?
Jeśli jednak dodaję tę kropkę, nie wydaje się ona rekurencyjnie przeszukiwać (jak w przypadku, tylko wyszukuje w tym elemencie). Przynajmniej tak mi się wydaje, ponieważ filtr nie działa już po tym, jak zrobię go względnie. Czy istnieje sposób, aby przeszukać go z tego elementu poza wyszukiwaniem w nim? –
@pvt pns To jest mocny wskaźnik, że coś innego jest nie tak. Czy możesz przesłać i połączyć się z pełnym przykładem? Jeśli nie chcesz tego zrobić, możesz również skontaktować się ze mną bezpośrednio (kliknij moje nazwisko, aby zobaczyć opcje kontaktu) – phihag
@phihag: Napisałeś * Dodaj "." (kropka) z przodu, aby była względna *. Możesz również użyć 'descendant :: a [zawiera (@href, ...)] jako wyrażenie względne. –