>

특정 클래스의 객체를 찾았습니다 :

THREAD = TREE.find_class('thread')[0]

이제 모든 <p> 를 원합니다  직접적인 자식 인 요소.

지쳤다 :

THREAD.findall("p")
THREAD.xpath("//div[@class='thread']/p")

그러나 그 모든 것은 모든 <p> 를 반환합니다.  이 <div> 내부 요소 그 <div> 에 상관없이  그들의 가장 가까운 부모입니다.

어떻게 작동 시키나요?

수정 :

샘플 HTML :

<div class='thread'>
   <p> <!-- 1 -->
      <!-- Can be some others <p> objects inside, which should not be counted -->
   </p> 
   <p><!-- 2 --></p>
</div>
<div class='thread'>
   <p>[...]</p>
   <p>[...]</p>
</div>

스크립트는 두 개의 객체를 찾아야합니다. <p> 의 자녀 인 . 샘플 HTML의 주석에서 "1"과 "2"로 표시된 두 개체의 목록을 받아야합니다.

편집 2 :

사람들이 혼동하기 때문에 또 다른 설명이 있습니다 :

THREAD  변수에 저장된 일부 객체이며 모든 html 요소가 될 수 있습니다. THREAD 를 찾고 싶습니다   <p> 의 직계 자손 인 물건 . 그 THREAD <p> 밖에있을 수 없습니다  또는 THREAD 내부에있는 모든 요소 내부 .

THREAD
  • 답변 # 1

    잘 모르겠지만 문제가 HTML 자체 인 것 같습니다. p 에 적용 할 수있는 태그 생략 사례가 몇 가지 있습니다.  노드, 따라서 단락 태그 닫기

    <div class='thread'>
        <p>first
            <p>second</p>
        </p>
    </div>
    
    

    구문 파서에 의해 단순히 무시되고 형제로 식별되었지만 부모와 자식이 아닌 두 노드 모두 예 :

    <div class='thread'>
        <p>first
        <p>second
    </div>
    
    

    그래서 XPath //div[@class="thread"]/p  두 단락을 모두 반환합니다

    p 를 간단히 대체 할 수 있습니다   div 태그  태그와 다른 동작을 볼 수 있습니다 :

    <div class='thread'>
        <div>first
            <div>second</div>
        </div>
    </div>
    
    

    여기 //div[@class="thread"]/div  첫 번째 노드 만 반환합니다.

    내 가정이 틀렸다면 저를 정정하십시오

  • 답변 # 2

    이 XPath 표현식을 사용해보십시오 :

    //p[parent::div[@class='thread']]
    
    

    또는 완전한 파이썬 표현 :

    THREAD.xpath("//p[parent::div[@class='thread']]")
    
    

    다른 (역) 접근법은이 XPath 표현식입니다 :

    div[@class='thread']/child::p"
    
    

    직접 child:: 를 사용하는

     축과 직접 하위 노드 만 선택합니다.

    요약 :
    두 표현식 중 어느 것이 더 빠른지 XPath 컴파일러에 따라 다릅니다. 와이즈 비즈  기본 축이며 다른 축이 지정되지 않은 경우 사용됩니다.

    <시간>

    FYI : XPath 계산은1에서 시작하며0이 아님.
    XML 예제와 관련하여 다음 표현식

    child::
    
    

    2의 결과가 되었음- count(//div[@class='thread'][1]/child::p) 계산 결과  + 와이즈 비즈 .

  • 답변 # 3

    PARENT.getchildren ()

    <p> <!-- 1 -->
    
    

    <p><!-- 2 --></p>

  • 이전 c++ - 함수가 제대로 작동하지 않고 디버거가 도움이되지 않습니다
  • 다음 python - 두 개의 목록이 주어진 정렬 행렬을 만드는 방법