문자열에서 HTML 태그를 제거하는 Python 코드
다음과 같은 텍스트가 있습니다.
text = """<div>
<h1>Title</h1>
<p>A long text........ </p>
<a href=""> a link </a>
</div>"""
외부 모듈 없이 순수 Python을 사용하면 다음과 같습니다.
>>> print remove_tags(text)
Title A long text..... a link
lxml.html.fromstring(텍스트)을 사용하여 수행할 수 있습니다.text_content() 하지만 2.6+용 내장 또는 표준 라이브러리를 사용하는 순수 파이썬에서 동일한 것을 달성해야 합니다.
내가 어떻게 그럴 수 있을까?
정규식 사용
정규식을 사용하여 내부의 모든 것을 청소할 수 있습니다.<>:
import re
# as per recommendation from @freylis, compile once only
CLEANR = re.compile('<.*?>')
def cleanhtml(raw_html):
cleantext = re.sub(CLEANR, '', raw_html)
return cleantext
일부 HTML 텍스트에는 '와 같이 괄호로 묶지 않은 엔티티도 포함될 수 있습니다.&nsbm그렇다면 정규식을 다음과 같이 쓰는 것이 좋습니다.
CLEANR = re.compile('<.*?>|&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-f]{1,6});')
이 링크에는 이에 대한 자세한 내용이 포함되어 있습니다.
아름다운 수프 사용하기
사용할 수도 있습니다.BeautifulSoup모든 원시 텍스트를 찾기 위한 추가 패키지.
BeautifulSoup을 호출할 때 파서를 명시적으로 설정해야 합니다."lxml"대안적인 답변에서 언급된 바와 같이 (기본 답변보다 더 강력한 답변이 될 수 있습니다.html.parser)(즉, 추가 설치 없이 사용 가능).
from bs4 import BeautifulSoup
cleantext = BeautifulSoup(raw_html, "lxml").text
하지만 외부 라이브러리를 사용하는 것을 방해하지는 않으므로 첫 번째 솔루션을 추천합니다.
편집: 사용하기lxml할 필요가 있습니다.pip install lxml.
Python에는 여러 개의 XML 모듈이 내장되어 있습니다.완전한 HTML을 가진 문자열이 이미 있는 경우에 가장 간단한 것은 당신이 언급한 lxml 예제와 유사하게 (어느 정도) 작동하는 것입니다.
def remove_tags(text):
return ''.join(xml.etree.ElementTree.fromstring(text).itertext())
이건 완벽하지 않다는 걸 알아둬요, 왜냐하면 만약 당신이 이런 것을 가지고 있다면,<a title=">">깨질 거예요하지만, 이것은 정말 복잡한 기능 없이 비도서관 파이썬에서 가장 가까운 것입니다.
import re
TAG_RE = re.compile(r'<[^>]+>')
def remove_tags(text):
return TAG_RE.sub('', text)
그러나 lvc 언급은 Python Standard Library에서 사용할 수 있으므로 기존과 같이 사용할 수 있도록 조정할 수 있습니다.lxml버전:
def remove_tags(text):
return ''.join(xml.etree.ElementTree.fromstring(text).itertext())
C와 같은 언어를 사용하는 간단한 방법이 있습니다.이 스타일은 Pythonic이 아니지만 순수 Python과 함께 작동합니다.
def remove_html_markup(s):
tag = False
quote = False
out = ""
for c in s:
if c == '<' and not quote:
tag = True
elif c == '>' and not quote:
tag = False
elif (c == '"' or c == "'") and tag:
quote = not quote
elif not tag:
out = out + c
return out
이 아이디어는 단순한 유한 상태 기계를 기반으로 하며 여기에 자세히 설명되어 있습니다. http://youtu.be/2tu9LTDujbw
http://youtu.be/HPkNPcYed9M?t=35s 에서 작동하는 것을 확인할 수 있습니다.
PS - 만약 당신이 (파이썬으로 스마트 디버깅하는 것에 대해) 수업에 관심이 있다면, 나는 당신에게 링크를 제공합니다: https://www.udacity.com/course/software-debugging--cs259 .무료입니다!
global temp
temp =''
s = ' '
def remove_strings(text):
global temp
if text == '':
return temp
start = text.find('<')
end = text.find('>')
if start == -1 and end == -1 :
temp = temp + text
return temp
newstring = text[end+1:]
fresh_start = newstring.find('<')
if newstring[:fresh_start] != '':
temp += s+newstring[:fresh_start]
remove_strings(newstring[fresh_start:])
return temp
언급URL : https://stackoverflow.com/questions/9662346/python-code-to-remove-html-tags-from-a-string
'codememo' 카테고리의 다른 글
| PL/SQL 로깅 - 제어 방법 (0) | 2023.06.12 |
|---|---|
| 하나의 숫자가 들어 있는 영숫자 이기종 문자열의 MySQL 열, 해당 숫자를 기준으로 정렬 (0) | 2023.06.12 |
| php 값을 갖는 div 콘텐츠 전환 방법 (0) | 2023.06.12 |
| Typescript의 as const에 해당하는 JSDoc? (0) | 2023.06.12 |
| Oracle에서 쉼표로 구분된 값을 열로 분할 (0) | 2023.06.12 |