2017-12-14 21 views
0

< (html 태그) 내의 텍스트를 제거하고 결과를 새 파일에 쓰려고합니다. 예를 들어, 한 줄의 텍스트가 될 수있다 : 웹 사이트 html 태그가 제거되지 않는 Python

< asdf> Text <here>more text</asdf> 

그래서 프로그램은 출력 파일에 쓸 것입니다 : "더 많은 텍스트를 텍스트", HTML 태그 내부의 사람들을 제외하고.

깨끗한 버전을 작성하지 않는 것
import urllib.request 

data=urllib.request.urlopen("some website").read() 

text1=data.decode("utf-8") 

import re 

def asd(text1): 

    x=re.compile("<>") 

    y=re.sub(x,"",text1) 

    file1=open("textfileoutput.txt","w") 

    file1.write(y) 

    return y 

asd(text1) 

는 여전히 태그가 :

이 지금까지 내 시도이다. 도와 줘서 고마워. 이 표현이 < asdf> 또는 </asdf> 일치하는 것입니다 생각하는 이유

+1

귀하의 정규 표현식 만 일치 충분하다. 나는 [BeautifulSoup 잡아보기 웹 페이지 텍스트] (https://stackoverflow.com/questions/1936466/beautifulsoup-grab-visible-webpage-text)와 같은 솔루션을 제안합니다. – Galen

+0

당신이 옳다. x = re.compile (r "<[^> +>") 프로그램이 이제 작동합니다. 고맙습니다. – Jaakkath

+1

태그에> 어딘가가 포함되어 있으면 어떻게 될까요? alecxe가 지적했듯이 정규 표현식으로 HTML을 구문 분석하는 것은 일반적으로 최선이 아닙니다. – Galen

답변

2
x=re.compile("<>") 

나는 확실하지 않다.

어쨌든 정규식 can rarely be justified으로 HTML에 접근 중입니다. 작업에 더 적합한 도구 인 HTML 파서을 사용하십시오.

BeautifulSoup을 사용하고 unwrap() method의 :

In [1]: from bs4 import BeautifulSoup 

In [2]: html = "<asdf>Text more text</asdf>" 

In [3]: soup = BeautifulSoup(html, "html.parser") 

In [4]: soup.asdf.unwrap() 
Out[4]: <asdf></asdf> 

In [5]: print(soup) 
Text more text 
+0

퍼포먼스에 관심이있는 몇몇 사람들은'BeautifulSoup'는 파서로'lxml'을 사용하기조차 정말 느립니다. 귀하의 html 텍스트가 긍정적으로 잘 형식화되어 있고 정규 표현식을 신뢰할 수 있다면 그것을 사용하는 데 문제가 없습니다. – Sraw

1

간단히 re.compile(r"<[^<>]*>")re.compile("<>") 교체은 "><"

+0

태그에> 어딘가가 포함되어 있으면 어떻게 될까요? – Galen