파서를 사용하여 재귀 적 방식으로 트리를 탐색하고 텍스트로 구성된 태그 만 바꿀 수 있습니다.
그래도 다음과 같은 사항을 고려해야합니다.
- 모든 텍스트를 교체해야하는 것은 아닙니다 (예 : 인라인 자바 스크립트)
- 문서의 일부 요소는 구문 분석 할 필요가 없습니다 (예 : 제목 등)
여기에 당신이 얻을 수있는 방법에 대한 신속하고 비 생산 준비 예입니다 :
html = """The HTML you need to parse"""
import BeautifulSoup
IGNORE_TAGS = ['script', 'style']
def parse_content(item, replace_what, replace_with, ignore_tags = IGNORE_TAGS):
for content in item.contents:
if isinstance(content, BeautifulSoup.NavigableString):
content.replaceWith(content.replace(replace_what, replace_with, ignore_tags))
else:
if content.name not in ignore_tags:
parse_content(content, replace_what, replace_with, ignore_tags)
return item
soup = BeautifulSoup.BeautifulSoup(html)
body = soup.html.body
replaced_content = parse_content(body, 'a', 'b')
이는 "A"는 "B"로, 그러나 떠나는 내용의 선두로부터 교체해야 즉 :
- 내부 인라인 자바 스크립트 또는 CSS (인라인 JS 또는 CSS는 문서 본문에 나타나서는 안됩니다.
- 같은 IMG와 같은 태그에서 참조하는 ...
- 태그 자체
물론, 당신은 필요, 당신의 용어에 따라, 당신은 단지 부품을 교체하지 않는 것이 있는지 확인하는 것입니다 뭔가 다른 단어로; 이렇게하려면 regex insted of content.replace를 사용하는 것이 좋습니다.
구문 분석을 위해 아름다운 수프를 확인하고 싶을 수도 있습니다. –
사실을 설명하고 대답하지 않은 것은 실제로 적절한 대답을 쓸 수 있도록 충분한 시간을 내 손안에 가지고 있었음을 지적해야합니다. 아래를 참조하십시오. –
하나의 루프에서 클라이언트 측 하이라이트를 수행 할 필요가 없습니다. 공동 시간 루틴을 시뮬레이트하려면 setTimeout을 사용하십시오. – Dykam