2014-10-20 2 views
0

나는 HTML을 가지고 있기 때문에 div 태그에 여러 가지 구조의 텍스트가 있습니다. 내가 원하는 유일한 것은, 이러한 태그의 내부 텍스트를 얻을 수 있습니다 만, 태그없이 등이 html DIV 예를 들어태그 및 특수 문자없이 div에서 텍스트 가져 오기/Python/

줄 바꿈 :

<div class="textNahlad"> 
    <i>Informácie pre záujemcu:</i> 
    <br> 
    Výberový pohovor je potrebné vopred dojednať telefonicky 
    <br> 
</div> 

그러나 또한 될 수 있습니다

<div class="textNahlad"> 
     <b>Informácie pre záujemcu:</b> 
     <br> 
     <br> 
     <br> 
     <i>Výberový pohovor je potrebné vopred dojednať telefonicky</i> 
     <br> 
</div> 

그래서 결과는 다음과 같습니다 Informácie pre záujemcu: Výberový pohovor je potrebné vopred dojednať telefonicky

내가 태그와 줄 바꿈 및 기타 혼란없이 텍스트 만 반환 할 수 있습니다 파이썬/BS4에서 함수가 있는지 궁금합니다. 그것을 다음 텍스트를 가져 태그 경우 텍스트 또는 태그를,인지, 내가 .contents를 사용하여 그것을 할 시도하고 각각의 내용 확인을 위해,하지만 제대로 작동하지 않습니다

find.('div',class_="textNahlad")

편집을 작동하지 않습니다.

답변

0

은 다음과 같이 수행

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 

content = """ 
<div class="textNahlad"> 
     <b>Informácie pre záujemcu:</b> 
     <br> 
     <br> 
     <br> 
     <i>Výberový pohovor je potrebné vopred dojednať telefonicky</i> 
     <br> 
</div> 
""" 
from bs4 import BeautifulSoup 
soup = BeautifulSoup(content) 
for string in soup.strings: 
    if string.strip(): 
     print string.strip(), 
+1

"záujemcu :"와 "Výberový"사이의 공백 수가 다릅니다. 그것을 수정하기 위해' ''.join (s.strip()])''을 사용하여 soup.strings의 s에 대해 s.strip()을 사용할 수 있지만, 그것은 어색합니다. – mhawke

0

내가 BS4의 get_text 방법은 잘 작동한다고 생각합니다. 그런 다음 여분의 공백을 제거하기 위해 정규식을 사용하여 결과를 처리 할 수 ​​있습니다. 다음

import re 

div = soup.find('div', class_='textNahlad') 

text = div.get_text() 
# '\nInformácie pre záujemcu:\n\n\n\nVýberový pohovor je potrebné vopred dojednať telefonicky\n\n' 

result = re.sub(r'\s+', ' ', text).strip() 
# 'Informácie pre záujemcu: Výberový pohovor je potrebné vopred dojednať telefonicky' 
1

사용자는 stripped_strings 속성을 액세스 할 수

from bs4 import BeautifulSoup 

html1 = '''<div class="textNahlad"> 
    <i>Informácie pre záujemcu:</i> 
    <br> 
    Výberový pohovor je potrebné vopred dojednať telefonicky 
    <br> 
</div>''' 

soup1 = BeautifulSoup(html1) 

html2 = '''<div class="textNahlad"> 
     <b>Informácie pre záujemcu:</b> 
     <br> 
     <br> 
     <br> 
     <i>Výberový pohovor je potrebné vopred dojednať telefonicky</i> 
     <br> 
</div>''' 

soup2 = BeautifulSoup(html2) 

>>> print ' '.join(soup1.stripped_strings) 
Informácie pre záujemcu: Výberový pohovor je potrebné vopred dojednať telefonicky 

>>> print ' '.join(soup2.stripped_strings) 
Informácie pre záujemcu: Výberový pohovor je potrebné vopred dojednať telefonicky 

>>> ' '.join(soup1.stripped_strings) == ' '.join(soup2.stripped_strings) 
True 

마지막 행은 공백 (<br>)의 입력에서 다르지만, 텍스트가 동일하다는 것을 나타낸다.

0

물론 은 lxml 또는 BeautifulSoup와 같은 적절한 구문 분석 라이브러리를 사용해야하지만 몇 가지 정규식과 문자열 방법을 사용하여 쉽게 수행 할 수 있습니다.

#! /usr/bin/env python 
# -*- coding: utf_8 -*- 

import re 

src = ''' 
<div class="textNahlad"> 
    <i>Informácie pre záujemcu:</i> 
    <br> 
    Výberový pohovor je potrebné vopred dojednať telefonicky 
    <br> 
</div> 
<div class="textNahlad"> 
     <b>Informácie pre záujemcu:</b> 
     <br> 
     <br> 
     <br> 
     <i>Výberový pohovor je potrebné vopred dojednať telefonicky</i> 
     <br> 
</div> 
''' 

flags = re.DOTALL 
#Capture div content 
pdiv = re.compile(r'<div [^>]*?>(.*?)</div>', flags) 
#Find remaining tags 
ptag = re.compile(r'<[^>]*?>', flags) 

def main(): 
    divs = pdiv.findall(src) 
    for i, d in enumerate(divs): 
     parts = [s.strip() for s in ptag.split(d)] 
     text = ' '.join(s for s in parts if s) 
     print "%d:\n%s\n" % (i, text) 


if __name__ == "__main__": 
    main() 

출력

0: 
Informácie pre záujemcu: Výberový pohovor je potrebné vopred dojednať telefonicky 

1: 
Informácie pre záujemcu: Výberový pohovor je potrebné vopred dojednať telefonicky 

이 코드는 HTML 엔티티를 처리하지 않습니다,하지만 추가 너무 어렵지 않다.

관련 문제