2017-12-14 21 views
0

<の中のテキストを削除しようとしています(htmlタグ)、その結果を新しいファイルに書き込みます。例えば、テキストの1行は次のようになります。 PythonがウェブサイトのHTMLタグを削除していません

< 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) 

まだタグがあり、クリーンなバージョンを記述していないようです。ご協力ありがとうございました。

+1

十分です。私は[BeautifulSoupを表示するWebページのテキスト](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("<>") 

私はなぜあなたは、この式は< asdf>または</asdf>に一致するように起こっていると思いますかわかりません。

いずれの場合でも、正規表現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

関連する問題