2017-10-17 1 views
-1

Ich versuche Selenium/Python zu verwenden, um eine grundlegende HTML-Tabelle zu lesen. Jede Zeile wird wie folgt formatiert:Analysieren einer Tabelle in Selen

<tr> 
<td bgcolor="#ffffbb"><font face="Arial"><font size=2><b><a href="https://www.lyngsat.com/tvchannels/id/TV-Polri.html">TV Polri</a></b></td> 
<td bgcolor="#ffffbb"><a href="https://www.lyngsat.com/freetv/Indonesia.html"><img src="/f.gif" title="LyngSat Free TV" height=15 width=15 align=absbottom border=1></a><br></td> 
<td bgcolor="#ffffbb"><font face="Verdana"><font size=1>MPEG-4</td> 
<td bgcolor="#ffffbb"><font face="Verdana" size=1><font color="darkgreen">&nbsp;&nbsp;&nbsp;16</font></td><td bgcolor="#ffffbb"><font face="Verdana" size=1>&nbsp;&nbsp;66</td> 
<td bgcolor="#ffffbb"><font face="Verdana" size=1>&nbsp;142&nbsp;In<br></td> 
<td bgcolor="#d0ffff"><font face="Verdana" size=1>new</font></td> 
</tr> 

Die Tabelle nicht IDs oder Klassen umfasst zwischenzuspeichern ab, so dass ich das Auswählen von Zeilen (auf TV-Kanäle bezogen) mit dem Inhalt von href:

text = "https:www.lyngsat.com/tvchannels/" 

for elem in driver.find_elements_by_xpath('//a[contains(@href,"%s")]' % text): 
    print(elem.text) # Prints TV Polri, the name of the TV channel 

Ich möchte jetzt die Geschwisterelemente durchlaufen, um die anderen Informationen in der Reihe zu ziehen (zB "MPEG-4", "16", "66", "142 In", "New"). Es wäre am einfachsten, wenn ich nur an die nächsten Geschwister mit so etwas wie bewegen kann:

channel_elem = elem.nextsibling() 

... aber diese Funktion scheint nicht zu existieren. Ich habe auch versucht, die anderen Geschwister zu finden, direkt ‚following-Geschwister‘ mit:

for channel_elem in driver.find_elements_by_xpath('//td//a[contains(@href,"%s")]/../../following-sibling::td' % text): 
    # Read 2nd sibling (Channel) 

aber finden keine Elemente, und fühlt sich auch wie ein Kreisel Lösung.

Vielen Dank im Voraus für die Hilfe.

+1

Ich bin mir nicht sicher, ob Selen diese Fähigkeit hat. Ich würde versuchen, BeautifulSoup seit IIRC verwenden, können Sie Geschwister mit ihm finden – Mangohero1

+1

[Geschwister in BeautifulSoup] (https://www.crummy.com/software/BeautifulSoup/bs4/doc/#next-sibling-and-previous- Geschwister) – Mangohero1

+0

Ich bin mir nicht sicher, wie xpath dieses 'font'-Element in Ihrem HTML behandelt, aber haben Sie das' //td//a[contains(@hrref,"%s")].... ../Folge-Geschwister :: td 'Pfad? Es sieht so aus, als gäbe es einen zusätzlichen Backstep. probiere '' //td//a[contains(@href,"%s")]/../following-sibling::td 'stattdessen –

Antwort

-2

Wie wäre es mit der Auswahl der Zeile und dem Auffinden der Spalten?

for row_elem in driver.find_elements_by_xpath('//a[contains(@href,"%s")]/../..' % text): 
    for col in row_elem.find_elements_by_xpath('./td'): 
     print(col.text) 
+0

Das wird nicht funktionieren, weil Sie '.text' nicht für eine Elementsammlung verwenden können. – JeffC

+0

Danke für den Hinweis auf meinen dummen Fehler @JeffC. Ich habe bearbeitet, um die innere Schleife der Spaltenelemente einzuschließen –

Verwandte Themen