2014-01-05 2 views
2

몇 가지 변수 조각 HTML 코드 나는 몇 가지 기능을 통해 컨텐츠를 건너 뛰는 클래스 코드 <span> 모든 태그의 내용을 수정해야파이썬에서 html 트리를 수정하는 방법은 무엇입니까?

<p> 
    <span class="code"> string 1 </ span> 
    <span class="code"> string 2 </ span> 
    <span class="code"> string 3 </ span> 
</ p> 
<p> 
    <span class="any"> Some text </ span> 
</ p> 

는,이 가정 같은 수정 된 태그의 내용을 반환 foo<span>. 내가 파이썬 라이브러리 BeautifulSoup4를 사용하여 특정 HTML 노드에 대한 검색을 쉽게 할 수 있다는 제안되었다

<p> 
    <span class="code"> modify string 1 </ span> 
    <span class="code"> modify string 2 </ span> 
    <span class="code"> modify string 3 </ span> 
</ p> 
<p> 
    <span class="any"> Some text </ span> 
</ p> 

: 궁극적으로,이 같은 HTML 문서의 새로운 조각을 얻어야한다. 내용을 수정하여 <span class="code">을 수행하고 새 버전을 새 파일로 저장하는 방법은 무엇입니까? 나는 당신이 soup.find_all ('span', class = re.compile ("code"))을 사용해야한다고 생각하는데,이 함수는(복사본)의 샘플 객체를 반환합니다.이 객체의 수정은 수프의 내용을 변경하지 않습니다. 이 문제를 어떻게 해결합니까?

답변

2

</ span>은 유효하지 않습니다. HTML이며 웹 브라우저의 엄격한 파서조차도 올바르게 구문 분석하지 않습니다. 당신이 당신의 HTML을 수정하면

, 당신은 .replaceWith()를 사용할 수 있습니다

from bs4 import BeautifulSoup 

soup = BeautifulSoup(''' 
    <p> 
     <span class="code"> string 1 </span> 
     <span class="code"> string 2 </span> 
     <span class="code"> string 3 </span> 
    </p> 
    <p> 
     <span class="any"> Some text </span> 
    </p> 
''', 'html5lib') 

for span in soup.find_all('span', class_='code'): 
    span.string.replaceWith('modified ' + span.string) 
+1

음이 BeautifoulSoup4''로 확인, 그것은''제대로을 분석한다! 그러나 그것은 '< span>'을 엉망으로 만듭니다. –

+0

@AshishNitinPatil :''은 서로 안에 중첩됩니다. – Blender

+0

오, 확인하지 않았어. 감사! –

관련 문제