11
8

More than 5 years have passed since last update.

rubyのクローラー”anemone”でローカルに保存したhtmlファイルを呼び出そうとした時にはまったこと

Last updated at Posted at 2015-10-13

オフラインでも開発を継続してできるように、ローカルのファイルをクローリングできるようにしたときにanemoneで同じようにやろうとしてはまったこと

結論からいうと、anemoneはHTTPリクエスト以外の場合では正常に動作しないとのこと。よく考えてみればanemoneってwebクローラーだったし、当たり前のことなんだけど、、

ローカルファイルをクロールするには、anemoneを使う必要はない。anemoneのgemをインストールした際に一緒にインストールされるnokogiriを利用すれば問題なし。nokogiriを使ったクローリングについては

このURLに書いてある。英語のドキュメントだけど、タイトルに[ FILE ]とかあるからだいたいどこ見ればいいかはわかると思う。

てことでオフラインでも好き勝手開発できるようになった。あまりニーズはないかもしれないけど、すごく困ったので書いてみた。

この辺を多少冗長な部分があるけど、唯一わかりやすく解説してくれているのは以下のリンク。

Project Name : 周りに勧められてスクレイピングなるものをしてみたいけど何すればいいのかわからなかったあの日の自分へ

やり方

間違っている点、修正したほうがいい表現などがあったらどんどん編集依頼を送っていただけたらとても嬉しいです。


以下、注意点

①ローカルファイルを「File.open(パス)」で指定するだけではダメ

というのも、nokogiriでスクレイピングする際には「xpath」という手法を使うのですが、そのためにはnokogiriのメソッド、またはanemoneのメソッドで呼び出したファイルしかその手法を活用できなかった。

もちろん、ローカルファイルの呼び出しにはfile.open使わなきゃいけないんだけどそのあとにnokogiriで使える形にするために1ステップコーディング

test.rb
require "nokogiri"
file = File.open("test.html")
doc = Nokogiri::HTML(file)

xmlファイルならば「html」と書いてあるところをすべて「xml」で書き換えれば問題なく利用していくことはできる。

ちなみに、nokogiriの使い方については、日本語のサイトはたいていよくわからないので公式ドキュメントを読みましょう。(よくわかんないメモ書きみたいなのを更新してる俺が言うのもなんだけど笑)

nokogiri.org

 ②もちろん、「file:///パス」でいくのもダメ

これはブラウザからローカルのファイルにアクセスするときに、よび出す書き方なんだけど、もちろんこれもダメ。

ブラウザでからアクセスできるが、これはfileプロトコルというものを活用しているのでなんかややこしいことになるからアウト。

これだと、通信プロトコルを使っているからanemoneでクローリングすることは可能。ただ、HTTPプロトコルで通信しているわけではないから色々問題が生じて、結局xpathで指定はできなかった。よびだせるけど、「InvalidURIError」って出てきてxpathで読み込むための形まで変換できないことが原因みたい。(正確なことはわからない)

11
8
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
11
8