やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

HTMLから本文を抽出してフォーマットする(改行+全角スペース)

 <p>の先頭に全角スペースを、</p>の末尾に改行2つを挿入する。

成果物

やってみる

事前準備

pip3 install extractcontent3
wget -O index.html 適当なニュースサイトURL

コードを書く

run.sh

#!/usr/bin/env python3
# coding: utf8
# 事前準備
#   pip3 install extractcontent3
#   wget -O index.html 適当なニュースサイトURL
import sys
import os
import extractcontent3

def format_to_text(html):
    import re
    import unicodedata
    st = re.sub(r"<p>([^ ])", r" \1", html) # 段落の先頭は全角スペース
    st = re.sub(r"</p>", "\n\n", st) # 段落の末尾は2つ改行する
    st = re.sub(r"</br>", "\n", st)
    st = re.sub(r"<br>", "\n", st)
    st = re.sub(r"<.+?>", "", st)
    # Convert from wide character to ascii
    if st and type(st) != str: st = unicodedata.normalize("NFKC", st)
    st = re.sub(r"[\u2500-\u253f\u2540-\u257f]", "", st)  # 罫線(keisen)
    st = re.sub(r"&(.*?);", lambda x: self.CHARREF.get(x.group(1), x.group()), st)
    st = re.sub(r"[ \t]+", " ", st)
    return st.rstrip("\n\t ")

print(extractcontent3.__file__)
if len(sys.argv) < 1:
    raise Error('第1引数にHTMLファイルパスを指定してください。')
    exit()
if not os.path.isfile(sys.argv[0]): 
    raise Error('第1引数HTMLファイルパスが存在しません。:'+sys.argv[0])
    exit()

extractor = extractcontent3.ExtractContent()
print(dir(extractor ))

opt = {"threshold":50}
extractor.set_option(opt)

html = open("index.html").read()
extractor.analyse(html)
text, title = extractor.as_text()
html, title = extractor.as_html()
title = extractor.extract_title(html)

print(title)
print(text)
print(html)
print(format_to_text(html))

実行

python3 run.sh

 できた。ポイントは以下。

  • <p>の先頭に全角スペースが挿入される
  • </p>の末尾に改行コードが2つ挿入される
  • <br>,</br>で改行コードが1つ挿入される

 たとえば以下のように表示される。

<p>段落です。</p><p>段落2です。</p>
 段落です。

 段落2です。
<p>段落です。<br>改行する。</p><p>段落2です。</p>
 段落です。
改行する。

 段落2です。

 これで日本語の文章が読みやすくなることを期待したい。

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux

前回まで