2016-10-11 2 views
0

: 내 HTML 소스 코드에서내가 모든 <code><h2></code> 태그의 텍스트 (사용 XPath는) 얻기 위해 노력하고 있어요

<div id="static_id"> 
<div>... 
<a ...> 
<div>... 
    <h2>Text 1</h2> 
<a ...> 
<div>... 
<div>... 
<span>... 
    <h2>Text 2</h2> 
    <a ...> 
    <span>... 
    <h2>Text 3</h2> 

<div id="static_id"> 
<div>... 
<span>... 
    <h2>Text A</h2> 
<a ...> 
<div>... 
<p>... 
<div>... 
    <h2>Text B</h2> 
<a ...> 
    <h2>Text C</h2> 
[...] 

는 ID static_id<div>'s있다 . 이 div 안에는 <h2> 태그 하나만 있습니다. 내용을 얻고 싶습니다.

lst = [["Text 1", "Text 2", "Text 3"], ["Text A", "Text B", "Text C"]] 

이 목록의 목록 (예에서와 같이 별도의 목록에서 생을 마감해야 하나 <div id="static_id">에서 모든 H2 텍스트가 있다고주의하십시오 : 결국, 나는 다음과 같다 목록을 가지고 싶습니다 .? 위의

는 생각이 달성 할 수있는 쉬운 방법

내가 모든 static_id 된 div를 계산하고이를 실현하려 모든 <h2> 태그를 반복 거기에 내 방법 :.

list_all = [] 
div_amount = len(tree.xpath('//div[@id="static_id"]')) # 2 elements in this case (works) 
for d in range(1, div_amount+1) # 1,2 
    h2_count = len(tree.xpath('//div[@class="static_id"]['+str(d)+']//h2')) #count h2 
    lst = [] 
    for i in range(1, h2_count+1) #1,2,3 
    h2_text = ''.join(tree.xpath('//div[@id="static_id"]['+str(d)+']//h2['+i+']/text()')) 
    lst.append(h2_text) 
    list_all.append(lst) 

행 2 : 카운트 모든 ID = "static_id"

3 호선 : 루프 모든 ID = "static_id"이상

4 호선 : 모든 H2 카운트 (HTML 소스에서 불행하게도 모든 수소의하는 것은 계산됩니다)

5 호선 : 루프를 통해 모든 H2의

행 6 : h2'text 가져 오기를 다음 목록에 저장

사람이 제발 도와 줄래? 이 일이 더 쉬워 질 것 같지만 어떻게해야할지 모르겠다.

list_all = [ static_id_div.xpath('.//h2/text()') 
      for static_id_div in tree.xpath('//div[@id="static_id"]') ] 

여기서 중요한 차이는 내부 쿼리가 외부 쿼리에 의해 반환되는 요소에 대한 실행되고 있다는 점이다,보다는 루트에서 시작하여 작동하기 :

+0

표본 데이터를 실제 표본 출력과 일치하는 유효한 XML로 만들어서 구문 분석하지 않은 의사 코드가 아닌 다른 사람이 답변을 확인하는 데 사용할 수 있도록하십시오. –

답변

0

쉽게 한 라이너를 만든 문서의

+0

그게 훨씬 나아. 정말 고마워요. (끝 부분에 하나가 없습니다.) – Chris

+0

감사합니다. 입력이 완료되지 않았기 때문에 테스트하지 못했습니다. :) –

관련 문제