Jestem nowym użytkownikiem Pythona i potrzebuję pomocy w zakresie składni do znajdowania i iterowania za pomocą znaczników html przy użyciu lxml. Oto przypadki użycia, z którymi mam do czynienia:Potrzebujesz pomocy dla składni lxml w pythonie dla html
Plik HTML jest dość dobrze uformowany (ale nie doskonały). Ma wiele tabel na ekranie, z których jedna zawiera zestaw wyników wyszukiwania, a druga dla nagłówka i stopki. Każdy wiersz wyników zawiera link do szczegółów wyniku wyszukiwania.
Muszę znaleźć środkowy tabelę z wierszy wyników wyszukiwania (ten udało mi się dowiedzieć):
self.mySearchTables = self.mySearchTree.findall(".//table") self.myResultRows = self.mySearchTables[1].findall(".//tr")
Muszę znaleźć linki zawarte w tej tabeli (w tym gdzie utknęłam):
for searchRow in self.myResultRows: searchLink = patentRow.findall(".//a")
Wygląda na to, że nie znajdują się w nich elementy linków.
Potrzebuję zwykłego tekstu linku. Wyobrażam sobie, że byłoby to coś w rodzaju
searchLink.text
, gdybym rzeczywiście dostał elementy linków.
Wreszcie, w faktycznym odnośniku API dla lxml, nie byłem w stanie znaleźć informacji na temat wywołania find i findall. Zbieram je z fragmentów kodu znalezionych w google. Czy brakuje mi czegoś, jak skutecznie znaleźć i iterować tagi HTML za pomocą lxml?
Yay! Dokładnie to, czego potrzebowałem. Zinterpretowałem cssselect, aby rzeczywiście wymagało, aby elementy miały zadeklarowaną klasę css. Zagnieżdżona logika wyszukiwania jest właśnie tym, czego potrzebowałem! Dziękuję Van Gale! –
Ta strona zaleca używanie iterchildren i iterdescendants z opcją tagu. http://www.ibm.com/developerworks/xml/library/x-hiperfparse/#N10239 – endolith
Świetna odpowiedź, ale jako drobny spór - dlaczego '.// tr/*/a' zamiast' .// tr // a'? Ten pierwszy nie znalazłby nic z dodatkowym tagiem interweniującym, tj. '