Pythonを使用してHTMLファイルからテキストを抽出する


243

Pythonを使用してHTMLファイルからテキストを抽出したいと思います。ブラウザーからテキストをコピーしてメモ帳に貼り付けた場合と基本的に同じ出力が必要です。

整形式のHTMLで失敗する可能性がある正規表現を使用するよりも堅牢なものを望みます。多くの人がBeautiful Soupを推奨するのを見てきましたが、それを使用する際にいくつか問題がありました。1つは、JavaScriptソースなどの不要なテキストを取得することです。また、HTMLエンティティは解釈されませんでした。たとえば、私は'を期待します ブラウザのコンテンツをメモ帳に貼り付けたかのように、HTMLソースでテキストのアポストロフィに変換されます。

アップデート html2textは有望に見えます。HTMLエンティティを正しく処理し、JavaScriptを無視します。ただし、プレーンテキストは正確には生成されません。それは、プレーンテキストに変換する必要があるマークダウンを生成します。例やドキュメントはありませんが、コードはきれいに見えます。


関連する質問:


かなりの間、人々は私のNLTKの回答(かなり最近)が非常に役立つと感じているようです。そのため、承認された回答を変更することを検討してください。ありがとう!
Shatu 2013年

1
私のお気に入りのブログの作者からの質問に出くわすとは思ってもみませんでした。エンデバー!
Ryan G

1
@Shatuソリューションが有効でなくなったので、コメントを削除することができます。ありがとう!;)
Sнаđошƒаӽ2016

回答:


136

html2textは、これでかなりうまくいくPythonプログラムです。


5
ビットは
gpl

138
すごい!著者はRIPアーロン・スワーツです。
Atul Arvind 2013

2
GPL 3.0のせいで、html2textに代わるものを誰か見つけましたか?
jontsai 2014

1
GPLは、人々が望んでいるほど悪くはありません。アーロンはよく知っていました。
スティーブK

2
html2textとnltkの両方を試しましたが、うまくいきませんでした。結局美しく機能するBeautiful Soup 4を使いました(しゃれたことはありません)。
ライアン

149

JavaScriptを取得したり、不要なものを取得したりせずにテキストを抽出するために見つけたコードの中で最高のもの:

import urllib
from bs4 import BeautifulSoup

url = "http://news.bbc.co.uk/2/hi/health/2284783.stm"
html = urllib.urlopen(url).read()
soup = BeautifulSoup(html)

# kill all script and style elements
for script in soup(["script", "style"]):
    script.extract()    # rip it out

# get text
text = soup.get_text()

# break into lines and remove leading and trailing space on each
lines = (line.strip() for line in text.splitlines())
# break multi-headlines into a line each
chunks = (phrase.strip() for line in lines for phrase in line.split("  "))
# drop blank lines
text = '\n'.join(chunk for chunk in chunks if chunk)

print(text)

あなたは前にBeautifulSoupをインストールする必要があります:

pip install beautifulsoup4

2
ちょうど言ったように、行#3を選択したい場合はどうでしょうか?
hepidad 2014

3
殺人台本、救世主!!
ナンダ

2
多くのスタックオーバーフローの回答を調べた後、これが私にとって最良のオプションであると感じています。私が遭遇した1つの問題は、行が一緒に追加される場合があることです。私はGET_TEXT機能にセパレーターを追加することで、それを克服することができました:text = soup.get_text(separator=' ')
Joswin KJ

5
代わりにsoup.get_text()を使用soup.body.get_text()したので、<head>要素からタイトルなどのテキストを取得しません。
Sjoerd

10
Python 3の場合from urllib.request import urlopen
Jacob Kalakal Joseph

99

注: NTLKはclean_html機能をサポートしなくなりました

以下の元の回答と、コメントセクションの代替案。


NLTKを使用する

html2textの問題を修正するために4〜5時間を無駄にしました。幸いなことに、NLTKに出会うことができました。
魔法のように機能します。

import nltk   
from urllib import urlopen

url = "http://news.bbc.co.uk/2/hi/health/2284783.stm"    
html = urlopen(url).read()    
raw = nltk.clean_html(html)  
print(raw)

8
時々それで十分です:)
シャルミラ

8
これを1000回賛成票で投票したい。私は正規表現の地獄で立ち往生していましたが、今、NLTKの知恵がわかります。
BenDundee 2013

26
どうやら、clean_htmlはもうサポートされていません。github.com/nltk/nltk/commit/...を
alexanderlukanin13

5
そのような単純なタスクのためにnltkのような重いライブラリをインポートするのは多すぎるでしょう
richie

54
@ alexanderlukanin13ソースから:raise NotImplementedError ("To remove HTML markup, use BeautifulSoup's get_text() function")
クリスアリーナ

54

今日も同じ問題に直面していることに気づきました。すべてのマークアップの受信コンテンツを取り除く非常にシンプルなHTMLパーサーを作成し、最小限のフォーマットで残りのテキストを返しました。

from HTMLParser import HTMLParser
from re import sub
from sys import stderr
from traceback import print_exc

class _DeHTMLParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.__text = []

    def handle_data(self, data):
        text = data.strip()
        if len(text) > 0:
            text = sub('[ \t\r\n]+', ' ', text)
            self.__text.append(text + ' ')

    def handle_starttag(self, tag, attrs):
        if tag == 'p':
            self.__text.append('\n\n')
        elif tag == 'br':
            self.__text.append('\n')

    def handle_startendtag(self, tag, attrs):
        if tag == 'br':
            self.__text.append('\n\n')

    def text(self):
        return ''.join(self.__text).strip()


def dehtml(text):
    try:
        parser = _DeHTMLParser()
        parser.feed(text)
        parser.close()
        return parser.text()
    except:
        print_exc(file=stderr)
        return text


def main():
    text = r'''
        <html>
            <body>
                <b>Project:</b> DeHTML<br>
                <b>Description</b>:<br>
                This small script is intended to allow conversion from HTML markup to 
                plain text.
            </body>
        </html>
    '''
    print(dehtml(text))


if __name__ == '__main__':
    main()

5
これは、デフォルトモジュールのみを使用してPython(2.7)でこれを行う最も簡単な方法のようです。これは非常にばかげています。これは非常に一般的に必要なことであり、デフォルトのHTMLParserモジュールにこれに対するパーサーがない理由はありません。
Ingmar Hupp、2011

2
HTML文字をUnicodeに変換することはないと思いますよね?たとえば、&amp;に変換されません&か?
スピードプレーン2012年

Pythonの3の使用のためにfrom html.parser import HTMLParser
sebhaase

14

これは、もう少し完全なxperroniの回答のバージョンです。スクリプトとスタイルセクションをスキップし、charrefs(&#39;など)とHTMLエンティティ(&amp;など)を変換します。

また、簡単な平文からHTMLへの逆変換も含まれています。

"""
HTML <-> text conversions.
"""
from HTMLParser import HTMLParser, HTMLParseError
from htmlentitydefs import name2codepoint
import re

class _HTMLToText(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self._buf = []
        self.hide_output = False

    def handle_starttag(self, tag, attrs):
        if tag in ('p', 'br') and not self.hide_output:
            self._buf.append('\n')
        elif tag in ('script', 'style'):
            self.hide_output = True

    def handle_startendtag(self, tag, attrs):
        if tag == 'br':
            self._buf.append('\n')

    def handle_endtag(self, tag):
        if tag == 'p':
            self._buf.append('\n')
        elif tag in ('script', 'style'):
            self.hide_output = False

    def handle_data(self, text):
        if text and not self.hide_output:
            self._buf.append(re.sub(r'\s+', ' ', text))

    def handle_entityref(self, name):
        if name in name2codepoint and not self.hide_output:
            c = unichr(name2codepoint[name])
            self._buf.append(c)

    def handle_charref(self, name):
        if not self.hide_output:
            n = int(name[1:], 16) if name.startswith('x') else int(name)
            self._buf.append(unichr(n))

    def get_text(self):
        return re.sub(r' +', ' ', ''.join(self._buf))

def html_to_text(html):
    """
    Given a piece of HTML, return the plain text it contains.
    This handles entities and char refs, but not javascript and stylesheets.
    """
    parser = _HTMLToText()
    try:
        parser.feed(html)
        parser.close()
    except HTMLParseError:
        pass
    return parser.get_text()

def text_to_html(text):
    """
    Convert the given text to html, wrapping what looks like URLs with <a> tags,
    converting newlines to <br> tags and converting confusing chars into html
    entities.
    """
    def f(mo):
        t = mo.group()
        if len(t) == 1:
            return {'&':'&amp;', "'":'&#39;', '"':'&quot;', '<':'&lt;', '>':'&gt;'}.get(t)
        return '<a href="%s">%s</a>' % (t, t)
    return re.sub(r'https?://[^] ()"\';]+|[&\'"<>]', f, text)


get_textでは、 ''。joinは '' .joinでなければなりません。空のスペースが必要です。そうでない場合、テキストの一部が結合されます。
Obinna Nnenanya

1
また、H1、H2 ....、spanなどの他のテキストコンテナタグを含める場合を除いて、これはすべてのテキストをキャッチしません。
Obinna Nnenanya

11

私はすでに多くの答えがあることを知っていますが、私が見つけた最もエレガントpythonicな解決策は、一部、ここで説明されています

from bs4 import BeautifulSoup

text = ''.join(BeautifulSoup(some_html_string, "html.parser").findAll(text=True))

更新

フレーザーのコメントに基づいて、これはよりエレガントな解決策です:

from bs4 import BeautifulSoup

clean_text = ''.join(BeautifulSoup(some_html_string, "html.parser").stripped_strings)

2
警告を回避するには、使用にBeautifulSoupのためのパーサを指定:text = ''.join(BeautifulSoup(some_html_string, "lxml").findAll(text=True))
フロイド

すなわち-あなたは、過剰な空白を避けるためにstripped_strings・ジェネレータを使用することができますclean_text = ''.join(BeautifulSoup(some_html_string, "html.parser").stripped_strings
フレーザー

8

ストリポグラムライブラリのhtml2textメソッドも使用できます。

from stripogram import html2text
text = html2text(your_html_string)

Stripogramをインストールするには、sudo easy_install stripogramを実行します。


23
このモジュールはpypiページによると「このパッケージを使用する歴史的な理由がない限り、お勧めしません!」
2010

7

データマイニング用のパターンライブラリがあります。

http://www.clips.ua.ac.be/pages/pattern-web

保持するタグを決定することもできます。

s = URL('http://www.clips.ua.ac.be').download()
s = plaintext(s, keep={'h1':[], 'h2':[], 'strong':[], 'a':['href']})
print s

6

PyParsingは素晴らしい仕事をします。PyParsing wikiが終了したため、ここにPyParsingの使用例(リンクの例)がある別の場所を示します。pyparsingで少し時間を費やした理由の1つは、非常に簡潔で非常によく整理されたO'Reilly Short Cutのマニュアルも作成したことです。

そうは言っても、私はBeautifulSoupを頻繁に使用しており、エンティティの問題に対処することはそれほど難しくありません。BeautifulSoupを実行する前にエンティティを変換できます。

幸運を


1
リンクが機能していないか、酸っぱい。
イベット

4

これは正確にはPythonのソリューションではありませんが、Javascriptが生成するテキストをテキストに変換します。これは重要だと思います(EG google.com)。ブラウザのリンク(Lynxではない)にはJavascriptエンジンがあり、-dumpオプションを使用してソースをテキストに変換します。

だからあなたは次のようなことをすることができます:

fname = os.tmpnam()
fname.write(html_source)
proc = subprocess.Popen(['links', '-dump', fname], 
                        stdout=subprocess.PIPE,
                        stderr=open('/dev/null','w'))
text = proc.stdout.read()

4

HTMLParserモジュールの代わりに、htmllibをチェックしてください。インターフェースは似ていますが、より多くの作業を行います。(それはかなり古いので、javascriptとcssを取り除くという点ではあまり役に立ちません。派生クラスを作成できますが、start_scriptやend_styleなどの名前のメソッドを追加できます(詳細については、Pythonのドキュメントを参照してください)。不正なhtmlに対して確実にこれを行うには。)とにかく、プレーンテキストをコンソールに出力する簡単なものを次に示します。

from htmllib import HTMLParser, HTMLParseError
from formatter import AbstractFormatter, DumbWriter
p = HTMLParser(AbstractFormatter(DumbWriter()))
try: p.feed('hello<br>there'); p.close() #calling close is not usually needed, but let's play it safe
except HTMLParseError: print ':(' #the html is badly malformed (or you found a bug)

注意:HTMLErrorとHTMLParserErrorはどちらもHTMLParseErrorを読み取る必要があります。これは機能しますが、改行を維持するのはうまくいきません。
デイブナイト

4

goose-extractorというGooseは、次の情報を抽出しようとするPythonパッケージをお勧めします。

記事のメインテキスト記事のメイン画像記事に埋め込まれたすべてのYoutube / Vimeoムービーメタ説明メタタグ

詳細:https : //pypi.python.org/pypi/goose-extractor/


4

より高速でより低い精度が必要な場合は、生のlxmlを使用できます。

import lxml.html as lh
from lxml.html.clean import clean_html

def lxml_to_text(html):
    doc = lh.fromstring(html)
    doc = clean_html(doc)
    return doc.text_content()

4

使用してhtml2textをインストールする

pipインストールhtml2text

その後、

>>> import html2text
>>>
>>> h = html2text.HTML2Text()
>>> # Ignore converting links from HTML
>>> h.ignore_links = True
>>> print h.handle("<p>Hello, <a href='http://earth.google.com/'>world</a>!")
Hello, world!

4

ここにはたくさんの答えがあることは知っていますが、新聞 3kにも言及する価値があると思います。私は最近、Web上の記事からテキストを抽出する同様のタスクを完了する必要がありました。このライブラリは、これまでのところ、テストでこれを達成する優れた仕事をしました。メニューアイテムとサイドバーにあるテキスト、およびOPリクエストとしてページに表示されるJavaScriptはすべて無視されます。

from newspaper import Article

article = Article(url)
article.download()
article.parse()
article.text

すでにHTMLファイルをダウンロードしている場合は、次のようなことができます。

article = Article('')
article.set_html(html)
article.parse()
article.text

記事のトピックを要約するためのNLP機能もいくつかあります。

article.nlp()
article.summary

3

美しいスープはhtmlエンティティを変換します。HTMLがバグが多く、Unicodeとhtmlのエンコーディングの問題で満たされていることを考えると、おそらくそれが最善の策でしょう。これは私がhtmlを生のテキストに変換するために使用するコードです:

import BeautifulSoup
def getsoup(data, to_unicode=False):
    data = data.replace("&nbsp;", " ")
    # Fixes for bad markup I've seen in the wild.  Remove if not applicable.
    masssage_bad_comments = [
        (re.compile('<!-([^-])'), lambda match: '<!--' + match.group(1)),
        (re.compile('<!WWWAnswer T[=\w\d\s]*>'), lambda match: '<!--' + match.group(0) + '-->'),
    ]
    myNewMassage = copy.copy(BeautifulSoup.BeautifulSoup.MARKUP_MASSAGE)
    myNewMassage.extend(masssage_bad_comments)
    return BeautifulSoup.BeautifulSoup(data, markupMassage=myNewMassage,
        convertEntities=BeautifulSoup.BeautifulSoup.ALL_ENTITIES 
                    if to_unicode else None)

remove_html = lambda c: getsoup(c, to_unicode=True).getText(separator=u' ') if c else ""

3

別のオプションは、テキストベースのWebブラウザを介してHTMLを実行し、それをダンプすることです。例(Lynxを使用):

lynx -dump html_to_convert.html > converted_html.txt

これは、次のようにpythonスクリプト内で実行できます。

import subprocess

with open('converted_html.txt', 'w') as outputFile:
    subprocess.call(['lynx', '-dump', 'html_to_convert.html'], stdout=testFile)

HTMLファイルのテキストだけを正確に提供するわけではありませんが、ユースケースによっては、html2textの出力よりも望ましい場合があります。


3

私にとって最も効果的なのはスクリプトです。

https://github.com/weblyzard/inscriptis

import urllib.request
from inscriptis import get_text

url = "http://www.informationscience.ch"
html = urllib.request.urlopen(url).read().decode('utf-8')

text = get_text(html)
print(text)

結果は本当に良いです


2

別の非Pythonソリューション:Libre Office:

soffice --headless --invisible --convert-to txt input1.html

これを他の選択肢よりも好む理由は、すべてのHTML段落が単一のテキスト行に変換される(改行なし)ためです。これは私が探していたものです。他の方法では後処理が必要です。Lynxは素晴らしい出力を生成しますが、私が探していたものと正確には同じではありません。その上、Libre Officeはあらゆる種類のフォーマットからの変換に使用できます...


2

誰もが漂白剤で試しbleach.clean(html,tags=[],strip=True)ましたか?それは私のために働いています。


私にとっても機能しているようですが、この目的での使用はお勧めしません。「この機能は、セキュリティに重点を置いた機能であり、悪意のあるコンテンツをWebのコンテンツとして表示できるように文字列から削除することを唯一の目的としています。ページ。" -> bleach.readthedocs.io/en/latest/clean.html#bleach.clean
Loktopus

2

Apache Tikaで良い結果が出ました。その目的は、コンテンツからメタデータとテキストを抽出することです。したがって、基礎となるパーサーはそれに応じてすぐに調整されます。

Tikaはサーバーとして実行でき、Dockerコンテナーで実行/デプロイするのは簡単で、そこからPythonバインディングを介してアクセスできます


1

簡単な方法で

import re

html_text = open('html_file.html').read()
text_filtered = re.sub(r'<(.*?)>', '', html_text)

このコードは、「<」で始まり「>」で終わるhtml_textのすべての部分を検索し、見つかったすべてを空の文字列で置き換えます


1

BeautifulSoupを使用し、スタイルとスクリプトのコンテンツを削除することで、@ PeYoTILの回答がうまくいきませんでした。のdecompose代わりに使ってみましたextractが、うまくいきませんでした。そこで、<p>タグを使用してテキストをフォーマットし、タグを<a>hrefリンクに置き換える独自のテンプレートを作成しました。テキスト内のリンクにも対応します。利用可能なこの主旨組み込みテストドキュメントと。

from bs4 import BeautifulSoup, NavigableString

def html_to_text(html):
    "Creates a formatted text email message as a string from a rendered html template (page)"
    soup = BeautifulSoup(html, 'html.parser')
    # Ignore anything in head
    body, text = soup.body, []
    for element in body.descendants:
        # We use type and not isinstance since comments, cdata, etc are subclasses that we don't want
        if type(element) == NavigableString:
            # We use the assumption that other tags can't be inside a script or style
            if element.parent.name in ('script', 'style'):
                continue

            # remove any multiple and leading/trailing whitespace
            string = ' '.join(element.string.split())
            if string:
                if element.parent.name == 'a':
                    a_tag = element.parent
                    # replace link text with the link
                    string = a_tag['href']
                    # concatenate with any non-empty immediately previous string
                    if (    type(a_tag.previous_sibling) == NavigableString and
                            a_tag.previous_sibling.string.strip() ):
                        text[-1] = text[-1] + ' ' + string
                        continue
                elif element.previous_sibling and element.previous_sibling.name == 'a':
                    text[-1] = text[-1] + ' ' + string
                    continue
                elif element.parent.name == 'p':
                    # Add extra paragraph formatting newline
                    string = '\n' + string
                text += [string]
    doc = '\n'.join(text)
    return doc

1
おかげで、この答えは過小評価されています。ブラウザーのように動作する(改行を無視し、段落と改行のみを考慮に入れる)きれいなテキスト表現にしたい人のために、BeautifulSoupはget_text単純にそれをカットしません。
jrial

@jrialが役に立ってくれてうれしいです。他の誰にとっても、リンクされた要点はかなり強化されています。OPがほのめかしているように見えるのは、lynxのようなテキストベースのブラウザーのように、htmlをテキストにレンダリングするツールです。これが、このソリューションが試みることです。ほとんどの人が貢献しているのは単なるテキスト抽出プログラムです。
racitup

1

Python 3.xでは、 'imaplib'および 'email'パッケージをインポートすることにより、非常に簡単な方法でそれを行うことができます。これは古い投稿ですが、多分私の答えはこの投稿の新しい人を助けることができます。

status, data = self.imap.fetch(num, '(RFC822)')
email_msg = email.message_from_bytes(data[0][1]) 
#email.message_from_string(data[0][1])

#If message is multi part we only want the text version of the body, this walks the message and gets the body.

if email_msg.is_multipart():
    for part in email_msg.walk():       
        if part.get_content_type() == "text/plain":
            body = part.get_payload(decode=True) #to control automatic email-style MIME decoding (e.g., Base64, uuencode, quoted-printable)
            body = body.decode()
        elif part.get_content_type() == "text/html":
            continue

これでb​​ody変数を印刷でき、プレーンテキスト形式になります:)それがあなたにとって十分であれば、それを受け入れられた回答として選択するとよいでしょう。


これは何も変換しません。
Antti Haapala 2017年

1
これはtext/plain、誰かがそこにそれを置いた場合に、メールからパーツを抽出する方法を示しています。HTMLをプレーンテキストに変換することは何もありません。たとえば、WebサイトからHTMLを変換しようとする場合、リモートで役立つことはありません。
tripleee 2017年

1

BeautifulSoupを使用すると、HTMLからテキストのみを抽出できます

url = "https://www.geeksforgeeks.org/extracting-email-addresses-using-regular-expressions-python/"
con = urlopen(url).read()
soup = BeautifulSoup(con,'html.parser')
texts = soup.get_text()
print(texts)

1

多くの人が正規表現を使用してHTMLタグを削除することについて言及しましたが、マイナス面もたくさんあります。

例えば:

<p>hello&nbsp;world</p>I love you

解析する必要があります:

Hello world
I love you

これが私が思いついたスニペットです、あなたはそれをあなたの特定のニーズにカスタマイズできます、そしてそれは魅力のように機能します

import re
import html
def html2text(htm):
    ret = html.unescape(htm)
    ret = ret.translate({
        8209: ord('-'),
        8220: ord('"'),
        8221: ord('"'),
        160: ord(' '),
    })
    ret = re.sub(r"\s", " ", ret, flags = re.MULTILINE)
    ret = re.sub("<br>|<br />|</p>|</div>|</h\d>", "\n", ret, flags = re.IGNORECASE)
    ret = re.sub('<.*?>', ' ', ret, flags=re.DOTALL)
    ret = re.sub(r"  +", " ", ret)
    return ret

1

Python 2.7.9以降でBeautifulSoup4を使用する別の例

含まれています:

import urllib2
from bs4 import BeautifulSoup

コード:

def read_website_to_text(url):
    page = urllib2.urlopen(url)
    soup = BeautifulSoup(page, 'html.parser')
    for script in soup(["script", "style"]):
        script.extract() 
    text = soup.get_text()
    lines = (line.strip() for line in text.splitlines())
    chunks = (phrase.strip() for line in lines for phrase in line.split("  "))
    text = '\n'.join(chunk for chunk in chunks if chunk)
    return str(text.encode('utf-8'))

説明:

(BeautifulSoupを使用して)urlデータをhtmlとして読み取り、すべてのスクリプトとスタイル要素を削除し、.get_text()を使用してテキストのみを取得します。行に分割し、各行の先頭と末尾のスペースを削除してから、複数の見出しを行に分割します。各チャンク=(line.split( "")のフレーズの行の行のphrase.strip())。次に、text = '\ n'.joinを使用して、空白行を削除し、最終的に認可されたutf-8として返します。

ノート:

  • これが実行される一部のシステムは、SSLの問題のためにhttps://接続で失敗します。検証をオフにして、その問題を修正できます。修正例:http : //blog.pengyifan.com/how-to-fix-python-ssl-certificate_verify_failed/

  • Python <2.7.9では、これを実行するときに問題が発生する可能性があります

  • text.encode( 'utf-8')は奇妙なエンコーディングを残すことができ、代わりに単にstr(text)を返したい場合があります。


0

これが私が定期的に使用するコードです。

from bs4 import BeautifulSoup
import urllib.request


def processText(webpage):

    # EMPTY LIST TO STORE PROCESSED TEXT
    proc_text = []

    try:
        news_open = urllib.request.urlopen(webpage.group())
        news_soup = BeautifulSoup(news_open, "lxml")
        news_para = news_soup.find_all("p", text = True)

        for item in news_para:
            # SPLIT WORDS, JOIN WORDS TO REMOVE EXTRA SPACES
            para_text = (' ').join((item.text).split())

            # COMBINE LINES/PARAGRAPHS INTO A LIST
            proc_text.append(para_text)

    except urllib.error.HTTPError:
        pass

    return proc_text

お役に立てば幸いです。


0

LibreOfficeライターのコメントには、アプリケーションがPythonマクロを使用できるためメリットがあります。この質問に答えることと、LibreOfficeのマクロベースを促進することの両方に複数の利点を提供するようです。この解決策が1回限りの実装であり、大規模な制作プログラムの一部として使用するのではなく、HTMLをライターで開いてページをテキストとして保存すると、ここで説明する問題が解決されるようです。


0

Perlの方法(申し訳ありませんが、私は本番環境では絶対に行いません)。

import re

def html2text(html):
    res = re.sub('<.*?>', ' ', html, flags=re.DOTALL | re.MULTILINE)
    res = re.sub('\n+', '\n', res)
    res = re.sub('\r+', '', res)
    res = re.sub('[\t ]+', ' ', res)
    res = re.sub('\t+', '\t', res)
    res = re.sub('(\n )+', '\n ', res)
    return res

これは、例えば、非常に多くの理由のために悪い習慣です&nbsp;
ウリGoren

はい!それは本当です!あれはもうやらないで!
brunql
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.