カクヨムをWebスクレイピング(Ruby&nokogiriで)



投稿小説サイトのカクヨムってえやつは小回りがきかない。
ちなみに私のページ
https://kakuyomu.jp/users/renno

「自主企画」っていう自分でイベント立てられる機能があるのだけれど、参加作品が多くなってくるとどれがチェック済みなのか判別しにくくなってくる。
主催者である以上全部読みたいけど、並びが制御できないので後から参加した作品が真ん中に入ってたりする、なんてのはザラ。
作品自体も修正や書き足しされるので、順番がぐちゃぐちゃになるのである。

スクレイピングでもしないことにはやってられないぜ、ということでまず「何の言語を使うか」を検討する。
Rubyにnokogiriっていう素晴らしいライブラリがあるので、これを使ってスクリプトを書く。



# URLにアクセスするためのライブラリの読み込み

ENV["SSL_CERT_FILE"] = "./cacert.pem"

require 'open-uri'
require 'net/ftp'
require 'nokogiri'

# スクレイピング先のURL:自分の自主企画アドレス
url = 'https://kakuyomu.jp/user_events/1177354054883762226'

user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.138 Safari/537.36 Vivaldi/1.8.770.54'
out_line = ""

# 重要ルーチン
def search_url(url,user_agent)
rt = ""
doc = Nokogiri::HTML( open(url, 'User-Agent' => user_agent).read )# タイトルを表示
doc.xpath('//h3[@class="widget-workCard-title"]').each do |item|

rt += "https://kakuyomu.jp" + item.css("a")[0][:href] + item.text.gsub(/\n/,'').sub(///,' - ')+"\n"
end
return rt
end

out_line += "エントリー\n\n"
out_line += search_url(url,user_agent)


# ファイル出力
File.open("./entry.txt", "w") do |f|
f.puts(out_line)
end



これぐらいで済むのがRubyの偉いところ。
ターミナル(MSYS2)で起動。コマンドプロンプトと比べると文字化けしないのと、Bashがやっぱり楽なので使ってる。

Image_computer/console.png

出来たテキストファイルをDiffってやればいいわけで。

Image_computer/wmerge.png

Diff用にはWinMergeを使用。

けっこう便利です。



 

コメントは日本語でお願いします。(URLは入力禁止:Do not URL writing.) :System message: コメントを受けつけています。