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


 クラウディア


1. 概要
2. インストール
3. ファイル
4. ソース
5. 参考サイト

1. 概要

 「id」を記述しているタグが複数あるので。  「id」の記述を行っているタグを「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」ファイルとして下記を読みこませて。
[tag]
id=h4 h5 a div span

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

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

 実行すると下記のような結果が得られます。

> ./ソースファイル名.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}
 つまり、セクション名をキーとしたハッシュからアイテム名をキーとしたハッシュを作成しているってことでしょうか。  よくできているのは、先頭が「#」の行は読み飛ばしてくれているところです。

5. 参考サイト

 本ページは、下記のサイトを参考にさせていただきました。
Python や Rubyでの INI ファイルの参照

audiobook.jp
AbemaTV 無料体験