Ruby - ウェブスクレイピング - リンク切れをチェック 1ページ

クラウディア 
1. 概要
2. インストール
3. ファイル
4. ソース

1. 概要

 id を記述しているタグが複数あるので。  id の記述を行っているタグを ini ファイルで指定できるようにしようと思ったのです。  本項は「Python や Rubyでの INI ファイルの参照」を参考にさせていただきました。

2. インストール

 inifile というモジュールが必要なようです。  gem でインストールするには

プロンプト略
gem install inifile
 FreeBSD の ports でインストールするには root ユーザで

プロンプト略
cd /usr/ports/textproc/rubygem-inifile
make
make install

3. ファイル

 ファイルを
~/.linkcheck
 としたかったのですが。  先頭の

#!/usr/bin/env ruby
 のためかホームディレクトリの定義がなくなっているようなので、当面、ソースディレクトリと同じディレクトリに配置することにしました。  まず「<a href="#なんとか">」と記述しているリンク先を探すために

[tag]
id=
 と記述して、id の箇所にスペースで区切って、id を定義しているタグを記述することにしました。  事情があって、チェックしたくないリンク先があって

[link]
nocheck=URI
 の形式で記述して、これもスペースで区切って列挙できるようにしました。

4. ソース

 本番のソースは別途掲載しました。  サンプルとして
#!/usr/bin/env ruby
require('inifile')

inifile = IniFile.load('.linkcheck')

puts("全有効行")
puts("#{inifile}")

puts("\n分類")
inifile.each do | key, value |
  puts('key = ['"#{key}"'] value = ['"#{value}"']')
end

puts("\n[:tag] を見る")
puts('inifile[:tag]'"#{inifile[:tag]}")

puts("\n[:output] を見る")
puts('inifile[:output]'"#{inifile[:output]}")


 というソースを書き、「ini」ファイルとして下記を読みこませて  [/home/kitayama/lang/ruby/sample/.linkcheck] というファイルが、なかったですじゃ・・・。  実行すると下記のような結果が得られます。

> ./ソースファイル名.rb
全有効行
[tag]
id = h4 h5 a div span

[link]
nocheck = https://px.a8.net/ https://go.microsoft.com/fwlink/

[output]
filename = linkchecker-out.html
silent =

分類
key = [tag] value = [id]
key = [link] value = [nocheck]
key = [output] value = [filename]
key = [output] value = [silent]

[:tag] を見る
inifile[:tag]{"id"=>"h4 h5 a div span"}

[:output] を見る
inifile[:output]{"filename"=>"linkchecker-out.html", "silent"=>nil}
 つまり、セクション名をキーとしたハッシュからアイテム名をキーとしたハッシュを作成しているってことでしょうか。  よくできているのは、先頭が「#」の行は読み飛ばしてくれているところです。
earthcar(アースカー)