IT

제거하는 Python 코드

lottoking 2020. 8. 7. 07:50
반응형

제거하는 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

def cleanhtml(raw_html):
  cleanr = re.compile('<.*?>')
  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추가 패키지를 사용 하여 모든 원시 텍스트 사용 가능 합니다.

BeautifulSoup을 호출 할 때 명시 적으로 파서를 설정해야합니다. 대체 대답에서 언급 한대로 "lxml"을 권장합니다 (기본 답변 (즉, 추가 설치없이 가능) 'html.parser'보다 강력 함).

from bs4 import BeautifulSoup
cleantext = BeautifulSoup(raw_html, "lxml").text

그러나 외부 라이브러리를 사용하는 것을 방해하지 않습니다.


Python에는 여러 XML 모듈이 내장되어 있습니다. 전체 HTML이 포함 된 것입니다. 이미있는 경우 가장 간단한 것 입니다.xml.etree

def remove_tags(text):
    return ''.join(xml.etree.ElementTree.fromstring(text).itertext())


이것이 완벽하지 않다는 점에 유의하십시오 <a title=">">. 그러나 정말 복잡한 함수없이 라이브러리가 아닌 Python에서 얻을 수있는 가장 가까운 방법입니다.

import re

TAG_RE = re.compile(r'<[^>]+>')

def remove_tags(text):
    return TAG_RE.sub('', text)

그러나 LVC에서 언급 한대로 파이썬 라이브러리에서 사용할 표준 수 있으므로 기존 버전 처럼 제공하도록 조정하면됩니다 .xml.etreelxml

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

추신-만약 당신이 수업에 관심이있는 권한 (파이썬을 관심이있는 스마트에 대해) 링크를 제공합니다 : http://www.udacity.com/overview/Course/cs259/CourseRev/1 . 무료입니다!


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

반응형