2017、11日目の記事になります。今回は以前実施した、Rubyでのスクレイピングについて再度記載したいと思います。さんのデータサイエンティスト養成読本という本を読みました。いろいろな技術の紹介があり、非常に参考になりました。その中でスクレイピングに関するサンプルコードもありました。今回はPythonで書かれていたスクレイピングのコードをRubyで書き直した記事になります。さんのサイトに行き、直近の記事タイトルとそのリンクを取得してJSONで吐き出します。ソースコード実際に書いたソースコードはこちらになります。その後、各項目について記載したいと思います。nilendendGihyoCrawler.runファイル名を指定してrubyコマンドで実行できます。gihyo_crawler.rb使用したモジュール、GemURIopen-urinokogiriJSON対象ページを取得open-uriのopenメソッドを使用し、対象URLを開いて取得します。Agentが渡せるので、クローラーだと分かるような名前をつけてあげます。取得したページはNokogiriでHTMLとして解析して返却します。Chromeなどを使用すれば、対象のHTMLタグのXPATHを取得することができるので、そちらから目的のものを取得します。XPATHの説明は、下記の方の記事が分かりやすいかと思います。クローラ作成に必須!XPATHの記法まとめChromeでXPathを取る・検証する同じ階層の、例えば<div>などは配列で返ってくるので、ループして必要なだけ抽出します。記事タイトル、リンク先それぞれ取得の方法が違うので、メソッドを用意してあげます。技術評論社さんの記事ページはページングされており、過去の記事を見るためには次のページへ行く必要があります。このとき、次のページボタンのXPATHを指定し、そのDOMのURLを取得すれば、同様の処理を繰り返すことで次のページの記事も取得できます。2が与えられています。それ以上過去の記事がなければ、リンクが取得できないはずなので、その場合はbreakします。省略end他のサイトの記事でも試してみるこのスクレイピングのコードですが、書籍で紹介されていた内容でかなり整っておりました。このコードを継承してしまえば、他のサイトだってだいたい取得できそうだったので試してみます。継承する際、継承元のGihyoCrawler.runをコメントアウトか消しておかないと2回実行されてしまうので気をつけてください。(私だけかもしれません。なんで2回実行されているんだ、とドツボにハマっていました。)本ブログ手前味噌ですが、本ブログにも記事一覧ページがありますので、ここから取得してみます。確認しながら進めると、クラス変数の値を変えるだけでいけました。'//*[@id="contentInner"]/div/article/div[1]/div[2]/a[4]'endReEnginesCrawler.runQiitaQiitaも取ってみます。Foundになってしまっています)のページから取得します。'//*[@id="main"]/div/div/div[1]/section/div[2]/ul/li[8]/a'endQiitaCrawler.runはてなブックマークはてなブックマークの新着からも取得してみます。はてなブックマークは新着記事の先頭が大きめの表示なので、ちょっとメソッドを変更しないといけないかな、と思いましたが、同じXPATHで取得できますね。「次へ」のようなリンクがないので、ループ回数は1回にしています。1endHatenaCrawler.runさいごにスクレイピングの勉強がてら書き換えてみました。サンプル自体が非常に良くできていたので、色々なブログをスクレイピングする際もかなりスピーディにできます。基底クラスは重要ですね。Railsで素早くWebページを作成することは違うので、Ruby自体の勉強にオススメです。コメントをキャンセルメールアドレスが公開されることはありません。コメント名前メールアドレスサイト上に表示された文字を入力してください。私たちは無料アプリもリリースしています、ぜひご覧ください。下記のアイコンから無料でダウンロードできます。