1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at
  • 技術の発展に伴い様々な学習を続けているが、結局データの取得・整理・検索に魅力を感じる。
  • その醍醐味であるスクレイピングを息抜きとして利用しているが、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シングル選抜メンバー大発表
**********

まとめ

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

参考

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?