読者です 読者をやめる 読者になる 読者になる

ひとメモ

Pythonを勉強して主にラズパイで何かするブログ

無料のはてなブログから違うブログサービスに引越す時、役立つかもしれない方法

無料のはてなブログからよそのブログサービスへの引越しは少し面倒

こんにちは。牛丼より豚丼派のひと(@hito_waft)です。
表題ですが、無料のはてなブログからエクスポートしたファイルを、そのまま別のブログサービスにインポートすると、はてなキーワードのリンクタグも一緒にくっついてきます。無料で使わせてもらってるので文句を言える立場ではないのですが、「さすがによそのブログに引越してまで付いてきていらんわい…」ということで簡単にリンクを外せるプログラムをPythonで書きました。
それをはてなブログに載せるのもどうかと思いますが、某ブログサービスが色々ややこしくて引越しをやめたのでここに書きます。はてなブログいいよね!

コード

# coding: utf-8

# In[1]:
import re

# In[2]:
regex = re.compile(r'<a class="keyword" href=\"(.*?)>(.*?)</a>')


# In[3]:
list = []

with open("/hoge/hoge.txt", "r") as f: 
    for text in f:
        words = re.sub(regex, "\\2", text)
        list.append(words)


# In[4]:
with open("/hoge/hoge_別の名前.txt", "w") as g:
    for out in list:
        g.write(out)
        
print("OK")

使い方

  1. In[3]の/hoge/hoge.txt部分をはてなブログのエクスポートファイルのパスに書き換えます。
  2. In[4]の/hoge/hoge_別の名前.txt部分には、はてなキーワードのリンクを消した後のテキストを格納するファイルのパスを置きます。先にファイルを作らなくてもプログラムを実行した時に勝手に作ってくれるので大丈夫。元のファイルにしてもいいんですが、もし予期せぬ出力のトラブルがあると面倒なので別のファイルを指定しています。間違えて関係ない他のファイルに上書きしてしまわないように気をつけてください!何か起こっても私は責任を取れません…
  3. 出力したテキストファイルを、中身を念のため確認してからインポートしてください。

詳しく説明

  • In[1]では正規表現を使うためのreモジュールをインポートしています。
  • In[2]では使用する正規表現コンパイルしています。はてなキーワードへのリンクは
    <a class="keyword" href="http://d.hatena.ne.jp/keyword/csv">csv</a>こんな感じになっています。(CSVへのリンク例)
    なので、<a class="keyword" href="ここはそれぞれ違う">hoge</a>という形のリンクを、hrefの中身が違っていてもきちんと抜き出せるように正規表現で指定しているわけです。正規表現についてはかなり奥が深いので、詳しくは公式ドキュメントなどを見てください。
    ちなみにここで使っている変数名regexは英語で正規表現という意味です。だからreモジュール。たぶん。
  • In[3]では、まず変換したテキストを入れる空のリストを作っています。続いてエクスポートしたファイルをwith文(こうすると後でclose()しなくて良い)を使ってf(as fの部分)という名前で開きます。その中の不要なリンクをre.subを使って置き換えています。words = re.sub(正規表現, ここに指定した文字列で置き換える, 対象のテキスト)の形で指定しています。
    第一引数の部分は直接正規表現を指定してもいいのですが、何度も同じ表現を繰り返し使う場合はコンパイルしておいた方が実行速度が速いそうです。あと見た目もスッキリわかりやすいですね。第二引数は上のコードの中では正規表現の中に(.*?)というグループが2つあるのでその2つ目という感じです。それをlistに追加しています。何度も言うようですが正確に知りたい人は公式ドキュメントなどを見てください。
  • In[4]でそれを新しくファイルに書き込んで終わりです。何となく、終わったら画面にOKと出力されるようにしました。インポートする前に出力がおかしくなっていないか一応確認してください。

参考

https://docs.python.jp/3/library/re.html(公式ドキュメント)
http://qiita.com/ao_love/items/6b5299b06214348c03a1
http://www.aipacommander.com/entry/2014/06/17/184220
http://springstar.hatenadiary.jp/entry/2017/01/22/キーワードリンクを消してすっきり。(はてなブ


広告