2016-10-06 2 views
2

iframe의 내용을 BeautifulSoup 객체로 바꾸려고합니다. 이BeautifulSoup 객체에 외부 태그를 추가하는 방법

s=""" 
<!DOCTYPE html> 
<html> 
<body> 

<iframe src="http://www.w3schools.com">   
    <p>Your browser does not support iframes.</p> 
</iframe> 

</body> 
</html> 
""" 

dom = BeatifulSoup(s, 'html.parser') 

으로 분석되고 원래의 HTML이고 지금은 또 다른 BeautifulSoup로 개체와 iframe 대응의 내용을 바꾸려면 내가 f = dom.find('iframe')

와 iframe을 얻을 가정 해 봅시다 , 예를 들어 newBO 객체. 내가 할 경우 f.replace_with(newBO) 작동하지만 iframe 태그가 사라져서 원래 파일의 계층 구조가 손실됩니다. 대신 BeautifulSoup로 객체의 난 그냥 문자열이 있다면 나는 f.string = 'just a string'을 할 수 있으며, 그 내용을 대체 할 것이다,하지만 난 f.string = newBO

을한다면 나는

TypeError: 'NoneType' object is not callable

그래서 나는 replace_with를 사용하지만 추가하려고 얻을 newBO에 iframe 태그. 어떻게해야합니까? 다른 방법을 제안 해 주시겠습니까?

+0

'get_text()'함수를 사용하여 태그 아래의 내용을 반환 할 수 있습니다. - f.get_text(). replace_with (newBO)'. 그것이 효과가 있는지 알려주세요. –

+0

@NikhilNanjappa, 텍스트는 태그와 아무 관련이 없습니다. 'get_text -> 브라우저가 iframe을 지원하지 않습니다. '그러면 OP가 원하는 것을 수행하지 않을 것입니다. –

답변

2

extract 내용 다음 insert :

from bs4 import BeautifulSoup 
dom = BeautifulSoup(s, 'html.parser') 

f = dom.find('iframe') 
for ele in f.find_all(): 
    ele.extract() 
new = BeautifulSoup("<div>foo</div>").find("div") 
f.insert(0, new) 
print(dom) 

당신을 줄 것이다 :

<!DOCTYPE html> 

<html> 
<body> 
<iframe src="http://www.w3schools.com"><div>foo</div> 

</iframe> 
</body> 
</html> 

또한 임의의 문자열이 f.string=""을 설정 제거하려면 :

f = dom.find('iframe') 

for ele in f.find_all(): 
    print(type(ele)) 
    ele.extract() 
f.string = "" 
new = BeautifulSoup("<div>foo</div>","html.parser").find("div") 
f.insert(0, new) 
print(dom) 

당신을 줄 것이다 :

<!DOCTYPE html> 

<html> 
<body> 
<iframe src="http://www.w3schools.com"><div>foo</div></iframe> 
</body> 
</html> 

이 경우 유일한 요소이기 때문에 f.append(new)을 사용할 수도 있습니다.

+0

당신이 제공 한 예제가 작동하지만 어떤 이유로 문제에 적용하려고 할 때 어떤 이상한 결과가납니다. 위의 절차를 정확히 수행하면 사전에 수프 객체를 저장했지만'new' 대신 'f.insert (0, dom [1]')와 같은 dom 사전에 저장 한 객체를 사용합니다. 나는 'NoneType'객체에 'insert'속성이 없다는 것을 알게된다. 기본적으로'f'의 모든 기능들에 대해이 논의를 통해 내가이 응답을 얻을 것인데, 어떤 생각이 잘못 될지 모른다. – LetsPlayYahtzee

+0

@LetsPlayYahtzee. 그 오류는'f = dom.find ('iframe')과 같은 호출에서 유래합니다. 'None'을 반환합니다. 코드에서 예상되는 태그를 찾았습니까? –

+1

내가 찾던 요소를 찾지 못했다는 것을 깨달았습니다. 도움을 청했습니다. – LetsPlayYahtzee

관련 문제