2017-10-17 1 views
-1

Selenium/Pythonを使用して基本HTMLテーブルを読み込もうとしています。各行は、次のようにフォーマットされる:Seleniumでテーブルを解析する

<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> 

テーブルはラッチオフするIDまたはクラスを含んでいないので、私は、HREFの内容を使用して(TVチャネルに関連する)の​​行を選択している:

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 

これで、行の他の情報を引き出すために兄弟要素を繰り返していきたいと考えています(例えば、 "MPEG-4"、 "16"、 "66"、 "142 In"、 "New")。私はちょうどのようなものを持つ次の兄弟に移動することができれば、最も簡単な次のようになります。

channel_elem = elem.nextsibling() 

...しかし、この機能は存在していないようです。私はまた、直接「次-兄弟」を使用して、他の兄弟を発見しようとしました:

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

が、これは任意の要素を見つけ、また、ロータリー・ソリューションのように感じていません。

ご協力いただきありがとうございます。

+1

私はセレンがその能力を持っているかはわかりません。私はあなたがそれで兄弟を見つけることができ、IIRC、以来BeautifulSoupを使って試してみた – Mangohero1

+1

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

+0

私はXPathがあなたのhtmlにその「フォント」要素をどのように処理するかわからないんだけど、あなたは「//td//a[contains(@href,"%s")]/../ことを確認してい.. /次の兄弟:: tdのパス?余分なバックステップがあるようです。代わりに –

答えて

-2

行を選択してから列を見つけるのはどうですか?

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

要素コレクションで '.text'を使うことができないので、うまくいきません。 – JeffC

+0

私の愚かな間違い@JeffCを指摘してくれてありがとう。私は列要素の内部ループを含めるように編集しました –

関連する問題