こんにちは、ほけきよです。
記事のリライトとか、最適化をしようとしたんですよ。 けど、どこをいつ最適化したとか、リライトしたとかわからなくなっちゃうんですよね。
じゃあ記事をエクセルで管理しちゃえば後々楽やん!天才。
と思って、一個一個温かみを持ってタイトルコピペとか繰り返してたんですが、 3回くらいで飽きました。 ムリ。
こんなんぶっこ抜くコード書いたほうが楽やん! という結論に至りましたので、書きました。
そして、意外に需要がありそうだったので、やっつけコードですが、紹介します。
なお、pythonで書いたのでpython環境があれば簡単に使えると思います。 注意点をいくつか書いているので用法用量をお守りの上、お使いください。
環境を作る
- python(3系)
- bs4
- urllib
すでにpython環境を持っているという方は、bs4
とurllib
だけ入れればOKです。*1
python環境をwindowsにいれる方法は、私の過去記事に書いています。anacondaを入れておくと大抵のことができるのではかどります(容量が2GBほど必要ということには注意しておいてください)
コード
下記コードをコピペしてarticles_to_csv.py
などで保存してください。
どこでもいいのですがあんまりわからない!って人はデスクトップに一旦保存しておきましょう。
from bs4 import BeautifulSoup import urllib from urllib import request import csv from argparse import ArgumentParser def articles_to_csv(url, output): is_articles = True page = 1 with open (output, "w") as f: writer = csv.writer(f, lineterminator='\n') # 改行コード(\n)を指定しておく while is_articles: try: html = request.urlopen("{}/archive?page={}".format(url, page)) except urllib.error.HTTPError as e: # HTTPレスポンスのステータスコードが404, 403, 401などの例外処理 print(e.reason) break except urllib.error.URLError as e: # アクセスしようとしたurlが無効なときの例外処理 print(e.reason) break soup = BeautifulSoup(html, "html.parser") articles = soup.find_all("a",class_="entry-title-link") for article in articles: try: writer.writerow([article.text, article.get("href")]) except UnicodeEncodeError as e: # ふざけた文字が入ってる場合はエラー吐くことも print(e.reason) print("この記事のタイトルに良くない文字が入ってます :",article.get("href")) if len(articles) == 0: # articleがなくなったら終了 is_articles = False page += 1 if __name__ == '__main__': parser = ArgumentParser() parser.add_argument("-u", "--url", type=str, required=True,help="input your url") parser.add_argument("-o", "--output", type=str, default="articles.csv", help="output csv name") args = parser.parse_args() articles_to_csv(args.url, args.output)
使い方
ターミナル or コマンドプロンプトを開き*2、さっきのarticles_to_csv.py
が保存されている場所まで移動します。
デスクトップに保存している方は下記コマンドで実行されるはずです。
cd Desktop python articles_to_csv.py --url http://www.procrasist.com --output my_articles.csv
一行目はデスクトップに移動しています。二行目の解説をちらっとしておくと
--url
以後には自分のサイトのURLを入力してください。URLの最後の/
はつけないでください。--output
以後には保存したいファイル名を入力してください。入力しなくても良くて、その場合はarticles.csv
という名前で保存されます。
これで、デスクトップにmy_articles.csv
というcsvファイルが保存されたはずです。こんな感じ。
注意点
- ファイル名に環境依存の文字が入っている場合は、csvに出力されません(例: ٩( ᐛ )و←こいつ / Pokémonの
é
など。) - csvに出力されない代わりに、
この記事のタイトルに良くない文字が入っています
という適当なエラーメッセージをコンソール上に吐くようにしています。 - csvと書いてますが、
.xslx
に拡張子を変えるとexcel専用になりますし、.csv
のままでもexcelで開けます。 TODO : 一回きりの利用を想定しているので、現行作業ファイルに新記事タイトルとURLの上書きなどの機能はない(いずれつけたい)
おわりに
これで一瞬でぶっこ抜くことができるようになりました。 リライトが捗るはず!!
使いたいっていう人で、なにかわからない所があればtwitter等で聞いてください。