2016-07-09 6 views
1

tr 요소의 부모 노드를 모두 반복하는 동안 문제가 발생합니다.tr 요소를 통해 반복하는 Python lxml

다음은 내가 작업중인 기본 테이블입니다. AttributeError를 :

<table border=1> 
    <tbody> 
    <tr> 
    <td> 
    <p>Some text</p> 
    </td> 
    <td> 
    <p>Some more text</p> 
    </td> 
    </tr> 
    <tr> 
    <td> 
    <p> Some more text</p> 
    </td> 
    <td> 
    <p> Some more text</p> 
    </td> 
    </tr> 
    <tr> 
    <td> 
    <p> Some more text</p> 
    </td> 
    <td> 
    <p> Some more text</p> 
    </td> 
    </tr> 
    </tbody> 
    </table> 

그리고 여기에 내가 스크립트를 실행할 때이 오류를 받고 있어요

import lxml.html 

htm = lxml.html.parse('plaintable.htm') 
tr = htm.xpath('//tr') 
for x in tr: 
    tbody = tr.getparent() 
    if tbody.index(tr) == 1: 
     print ('Success!') 
print ('Finished') 

LXML를 사용하여 부모 노드를 얻기 위해 내 파이썬 스크립트의 '목록'개체가 어떤 속성이 없습니다 '의 getParent '

저는 파이썬에 아주 익숙해서 단순한 무언가가 될 수 있습니다. 나는 lxml 문서를 읽고 대답을 찾을 수 없었다.

도움이 될 것입니다.

답변

1

tr은 실제로 xpath 일치 목록입니다. x 개별 tr 요소에 해당 - 대신에 getparent() 메소드를 호출

tr = htm.xpath('//tr') 
for x in tr: 
    tbody = x.getparent() 
    # ... 

비록, 나는 루프에서 또 다시 같은 부모를 얻기에 많은 의미가 표시되지 않는 경우에 당신은 하나의 table이 및 tbody 요소. 왜 사전을 찾을 수없는이에 관해서는

tbody = htm.xpath("//tbody")[0] 
for x in tbody.xpath(".//tr"): 
    # ... 

I need to find the first tr in every table to build it properly

을 - 나는 모든 table 요소를 반복하고 처음 tr 요소를 찾아 낼 것입니다 :

tables = htm.xpath("//table") 
for table in tables: 
    first_tr = table.xpath(".//tr")[0] 
+0

아 완벽! for 루프에서 인덱스를 호출하는 방법을 오해했습니다. JavaScript에 익숙해서 힘들었습니다. 요컨대, HTML 문서의 테이블을 기반으로 XML 파일을 작성합니다. 현재 36 개의 다른 테이블을 사용하고 있습니다. 모든 테이블에서 첫 번째 tr을 제대로 찾아야합니다. – Chad

+0

@Chad에서 가져온 코드는 "모든 테이블에서 첫 번째 tr을 올바르게 작성해야합니다."라는 샘플 코드로 업데이트되었습니다. 감사! – alecxe

+0

부모 노드를 만드는 데 엄청난 도움이 될 것입니다. 도와 주셔서 정말 고맙습니다. – Chad