🍵

[息抜き]乃木坂工事中一覧を制限のある環境でスクレイピングとデータ整理

2021/07/21に公開
  • 技術の発展に伴い様々な学習を続けているが、結局データの取得・整理・検索に魅力を感じる。
  • その醍醐味であるスクレイピングを息抜きとして利用しているが、pythonやruby,node等のライブラリが豊富な言語がない環境でも利用したい。
  • 今回は最低限のLinux環境での機能やコマンドを利用してスクレイピング及びデータ整理を行う。

環境

  • Alpine Linux 3.14.0
  • curl 7.77.0
  • ※Macでも動作加納

手順

データの要件決め

  • 取得したいデータ要件は以下。
    • 形式 : TSV
    • 1列目 : 日時(xxxx年xx月xx日)
    • 2列目 : タイトル

ファイル用意

  • 以下のように、任意のフォルダに新規のshellファイルを作成する。
mkdir ~/ng; cd $_
touch get_kojichu.sh
  • 作成後、中身を以下のようにする。
#!/bin/sh

set -e

current_year=$(date '+%Y')
page_data=$(curl -s 'https://ja.wikipedia.org/wiki/乃木坂工事中の放送日程一覧')
search_command="grep -A 1 -E '<td style=.+>[0-9]+月[0-9]+日' | sed -r -e 's/<[^>]+>//g' -e 's/&#.+//g' -e '/--/d' | tr -d '\"' | awk '{if(NR%2)ORS=\"\t\"; else ORS=\"\n\"; print}'"

for i in `seq 2015 $current_year`; do
  [ $i -ne $current_year ] && {
	echo "$page_data" |
	sed -n "/<span class=\"mw-headline\" id=\"$i\">/,/<span class=\"mw-headline\" id=\"$((i+1))\">/p" |
	eval ${search_command} |
	sed "s/^/$i年/"
  } || {
	echo "$page_data" |
	sed -n "/<span class=\"mw-headline\" id=\"$i\">/,/<span class=\"mw-headline\" id=\"脚注\">/p" |
	eval ${search_command} |
	sed "s/^/$i年/"
  }
done
  • 中身記述後、chmod 755 get_kojichu.shで実行権限を与える。

結果

  • 以下で結果を確認
# 最初の10件を表示
$ ./get_kojichu.sh | head

2015年4月20日	ななせまると愉快な仲間たち
2015年4月27日	狩野英孝のリアクション塾
2015年5月4日	生田絵梨花vs催眠術師
2015年5月11日	12thシングル選抜メンバー発表乃木坂46センター討論会
2015年5月18日	松井玲奈の世界一教えたい授業乃木坂監視中・特別編

# TSVデータに書き出す。過通信を防ぐため以下からはこちらを使用。
$ ./get_kojichu.sh > kojichu_list.tsv

# 最新日時順
$ cat kojichu_list.tsv | sort -Vr

2021年7月19日	上半期・私の反省大賞!
2021年7月12日	松村沙友理 卒業記念! 完結編
2021年7月5日	松村沙友理 卒業記念! 設楽王決定戦 
2021年6月28日	奇想天外!与田クイズ
2021年6月21日	27thシングルヒット祈願! 完結編
*******

# タイトルのみ抜き出す
$ cat kojichu_list.tsv | awk -F '\t' '{print $2}'

ななせまると愉快な仲間たち
狩野英孝のリアクション塾
生田絵梨花vs催眠術師
12thシングル選抜メンバー発表乃木坂46センター討論会
******

# 検索
$ cat kojichu_list.tsv | grep '選抜メンバー'

2015年5月11日	12thシングル選抜メンバー発表乃木坂46センター討論会
2015年8月31日	13thシングル選抜メンバー発表初めてのWセンター西野・白石ガチンコチーム対決 前編
2016年2月1日	14thシングル選抜メンバー大発表
2016年6月6日	15thシングル選抜メンバー大発表
**********

まとめ

  • 最低限の環境でも動作する記述を意識するようになった。
  • 年情報も必要であり記述が冗長となったため、より良い記述を今後考える。
  • 息抜きは重要。

参考

Discussion