2014-12-06 95 views
2

這個問題聽起來很容易,但我在解決它時遇到了困難。我有這樣一個如下表:在Python中刮掉HTML表lxml

<table><tbody> 
<tr> 
<td>2003</td> 
<td><span class="positive">1.19</span> </td> 
<td><span class="negative">-0.48</span> </td> 
</tr> 

我的代碼如下:

from lxml import etree 

for elem in tree.xpath('//*[@id="printcontent"]/div[8]/div/table/tbody/tr'): 
    for c in elem.xpath("//td"): 
     if(c.getchildren()): # for the <span> thing 
      text = c.xpath("//span/text()") 
     else: 
      text = c.text 

但我無法遍歷「TD」的元素。我一直在嘗試這一整天但無濟於事!我想得到2003. 1.19和-0.48。

請幫忙!

回答

4

它看起來像你有HTML,而不是XML。因此,使用lxml.html而不是lxml.etree 來解析數據。如果data.html看起來是這樣的:

<table><tbody> 
<tr> 
<td>2003</td> 
<td><span class="positive">1.19</span> </td> 
<td><span class="negative">-0.48</span> </td> 
</tr> 

然後

import lxml.html as LH 
tree = LH.parse('data.html') 
print([td.text_content() for td in tree.xpath('//td')]) 

產生

['2003', '1.19 ', '-0.48 '] 

如果

for elem in tree.xpath('//*[@id="printcontent"]/div[8]/div/table/tbody/tr'): 

沒有返回任何elem S,那麼你需要證明我們足夠的HTML來幫助我們調試爲什麼這個XPath不起作用。

+0

bravo!是的,我犯了這個XML - HTML錯誤 – user3001408 2014-12-06 13:41:35