MAGAZINE
ルーターマガジン
Nokogiri拡張Rubygem Tonkachiのご紹介
![](https://rooter.jp/wp-content/uploads/2019/09/tonkachi.jpg)
こんにちは。エンジニアのAraoです。今回は、Webスクレイピングで役に立つ、Nokogiriの拡張Rubygemを紹介します。これまた随分と間が空いてしまいましたが、スクレイピングでNokogiri HTMLパース時に、tableを転置するメソッドの紹介の続きになります。
Nokogiri拡張Rubygem、その名もTonkachi
弊社では、WebページのHTMLから必要な情報を取り出すのに、NokogiriというRubygemを使っています。そのNokogiriに関連して、あったら良いなと思う汎用的なメソッドを、TonkachiというRubygemとして公開しました。
ネーミングについては、ノコギリと来たらトンカチだろう、という、割といい加減な理由です。
提供する機能とそのサンプル
tonkachi | RubyGems.orgこちらが今回公開したTonkachiのRubygemページです。見ての通り、Nokogiriに依存しています。
sample_tonkachi: sample script for tonkachiそしてこちらが、Tonkachiで提供する4メソッドのサンプルスクリプトです。実行方法は以下の通りです。
$ bundle install $ bundle exec ruby sample.rb
提供する4メソッドについて解説します。
free_rowspan_colspan(table_node)
Nokogiriのテーブルノードを対象に、rowspan、colspanで結合されたセルを分割するメソッドです。セル結合の設定が変で、セルの欠損がある部分があった場合、そのセルを空白セルで補う機能も付いています。変換前後で以下のような感じになります。
![](https://rooter.jp/wp-content/uploads/2019/09/merged_table.png)
![](https://rooter.jp/wp-content/uploads/2019/09/free_table.png)
transpose_nokogiri_table(table_node)
Nokogiriのテーブルノードを転置するメソッドです。前回記事で紹介したメソッドそのままになります。変換前後で以下のような感じになります。全く別のテーブルノードを返しているため、テーブルタグの属性などは全て失われます。必要な場合は補ってください。
![](https://rooter.jp/wp-content/uploads/2019/09/normal_table.png)
![](https://rooter.jp/wp-content/uploads/2019/09/transposed_table.png)
get_nodes(node)
対象のノード以下のノードを再帰的に辿り、順序関係を維持した配列を返すメソッドです。階層構造ではなく順序関係が必要な場面で使います。こちらは文章での説明が難しいため、実際にサンプルスクリプトを実行してみてください。
get_css_path(node)
対象のノードの、id、class情報付きのCSSパスを取得するメソッドです。以下のような形で、CSSパスを取得することができます。
html > body > h1#tonkachi > text() html > body > div:nth-of-type(2).category > h3:nth-of-type(2).method
今後の予定
やや駆け足での紹介となってしまいましたが、ひとまずRubygemという形でNokogiri拡張メソッドを公開しました。今後は、さらなる機能追加、また我々以外のWebスクレイピングエンジニアが改修を加えられるよう、テストやドキュメント周りの整備を進めていきます。
CONTACT
お問い合わせ・ご依頼はこちらから