2014-12-06 6 views
2

질문이 쉽게 들릴지 모르지만 문제를 해결하는 데 어려움이 있습니다.Python lxml에서 HTML 표 스크래핑

<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

XML이 아닌 HTML이있는 것 같습니다. 따라서 lxml.etree 이 아닌 lxml.html을 사용하여 데이터를 구문 분석하십시오. data.html이 보이는 경우 어떤 elem의를 반환하지 않습니다

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

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

경우

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

가 산출

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

, 당신은 보여줄 필요 이 XPath가 작동하지 않는 이유를 디버깅하는 데 도움이되는 충분한 HTML.

+0

bravo! 예,이 XML - HTML 실수를했습니다. – user3001408