この記事は最終更新日から一定の時間が経過しています。情報が古くなっている可能性があるため注意してください。 Webスクレイピングに関する記事は散々出尽くしていますが、2022年現在Ruby で Webスクレイピングをしたい場合の技術選定ってどんな状況だろう?という疑問のもと調べ直したのでまとめたいと思います。 結論、特に新しいものではなく典型的な Mechanize および Nokogiri による構成に落ち着きました。 Nokogiri は直接操作するのが初めてだったので、使ってみた感想にも触れていきたいと思います。 この記事で説明することRuby での Webサイトスクレイピング手法の実装の一例を説明します。 ログインが必要なページでの Mechanize の実装例について そして記事の最後ではなぜRuby なのかを個人的な目線で説明します。 説明しないことRuby の環境構築
RubyではWebサイト作成以外にも様々なシステム開発が可能ですが、Webスクレイピングに関しても簡単に実装することが可能です。本記事では、Rubyでのスクレイピングに利用可能なライブラリ「Nokogiri」について、インストール方法から簡単な使い方までご紹介していきます。 Nokogiriについて Nokogiriは、Rubyでスクレイピング処理を実装したい際に利用される代表的なライブラリです。スクレイピングって何?スクレイピングは、WebサイトからHTMLデータを抽出する技術で、特定の要素や画像などを抽出・加工することが出来ます。 具体的な利用用途としては、見出しだけを抽出して目次を作成したり、商品の価格や画像を抽出して一覧として加工するなど用途で利用されます。 Nokogiriのインストール方法 Nokogiriのインストールには、Rubyのパッケージ管理システムである「gem
自作したスクレイピングツールで画像をあつめたい 現在開発中のアプリケーションで、エフェクターボードの画像が100枚くらい欲しかったので、Google画像検索から画像を集めることにしました。 画像収集は機械学習などでかなり需要があるらしく、自作せずとも利用可能なツールがいくらかあるようです。GitHub - hardikvasa/google-images-download:Python Script to download hundreds of images from 'Google Images'.It is a ready-to-run code! 画像クローラー - Qiita せっかくですが、rubyではWebスクレイピングするようなプログラムは書いたことがなかったので、自作してみることにしました。 nokogiriかSeleniumかrubyでスクレイピングをする場合、
スクレイピングとは Webサイトから自分の知りたい情報を抽出すること。 ex) 文章、画像、動画など 今回の目標 Qiitaで「ruby」と検索して「いいね順」に並べた検索結果一覧をスクレイピングします。 1. URLのパスパラメータ・クエリパラメータを理解するスクレイピングをするにはURLのパラメータについて理解する必要があります。 「そんなん余裕で知っとるわ!」という方は飛ばして次章へどうぞ! パラメータの種類 URLでドメイン以降の/で区切られたパス1つ1つがパスパラメータです URLの?以降がクエリパラメータです(複数記述する場合は&で繋ぎます)。 例えばこのURLは。 https://qiita.com/search?page=1&q=ruby&sort=like 以下のパラメータになります。 種類 パラメータ名 パラメータの値
nokogirirはHTMLドキュメント解析 mechanizeは「シンプルログイン」認証突破 「シンプルログイン」の個人的な定義は、「フォームにIDとパスワードを入力してログインボタンをクリックしてマイページへ!」みたいなサイトです。 「え?逆にそれ以外何があるの?」最近よくあるじゃないですか、IDを入れたらパスワード入力フォームが現れたり、ログイン時にページが動的に動くサイト。そういうサイトでもmechanizeで認証とれるかもしれませんが、個人的に私はすぐに諦めます。そういうサイトはすぐにselelniumに移行します。 「すぐ諦めたら、力つかないよ!」確かに一理ありますね。しかし私はスピードとストレスと全体的なコストを比較して、「シンプルログインサイト以外はseleniumに即移行!」とすることにしました。 nokogiriの基本的な使い方 Webページ「https:// ○○○.
どうもてぃです。 とある巨大ECサイト(通称熱帯雨林)をスクレイピングして遊んでいます。 今回は nokogiri で問題が発生したので記事にしました。 nokogiriのスクレイピング精度はあんまり良くないのを実体験で痛感しましたね。 environment Ubuntu 16.04.5 LTS(elementary OS 0.4.1 Loki)Ruby 2.5.0Rails 5.2.1 issue ページネーション要素の取得です。 Nokogiriだと4〜6割の確率でページネーションを取得できない場合があります。 問題なのが、Seleniumだとページを読み込み終わるまで待つSelenium::WebDriver::Waitがあるのに対して、Nokogiriにはwaitが存在しません。 あと、NokogiriではJS等で動的に表示しているページは上手く取得できないことがあるとのこと
なぜ失敗するかというと、nokogiriとrmagickはシステムに特定のソフトウェアやライブラリが入っていることに依存しているからだ。依存しているソフトウェアやライブラリをPATHの通った場所に用意してやらなければビルドができない。 nokogiriで問題になるのは主にlibxml2だ。nokogiriは独自のパッチをあてたlibxml2をビルドして使う。libxml2のビルドに必要になるソフトウェアとライブラリがある。 具体的な方法は公式ドキュメントに情報がある。 Installing Nokogiri - Nokogiri 特に入っていない可能性が高いのはzlibとliblzmaだ。Debian系ならば以下のようにパッケージをインストールする必要がある。 apt installbuild-essential patchruby-dev zlib1g-dev liblzma-dev
概要 例によってSierraをクリーンインストールして開発環境を再構築する際に、 Nokogiri Gemのインストールが失敗するようになってしまいました。 Nokogiriはeventmachine、RMagickに続く一発で入らないGem三銃士の一人ということもあり、 過去にもWeb上に解決方法が上げられていますが、今回はそれとは異なる解決方法となるため整理しました。 TL;DR Nokogiriの公式サイトに解決方法が挙げられているのですが、bundle configで設定しておく方法が最もよいと思います。 libxml2をHomebrewでインストールします。 Installing nokogiri 1.6.8.1 with native extensions Gem::Ext::BuildError:ERROR: Failed tobuild gem native exten
Overview OverviewAPI Support Tutorials Changelog About Nokogiri¶ Nokogiri (鋸) makesit easy and painless to work with XML andHTML fromRuby.It provides a sensible, easy-to-understandAPI for reading, writing, modifying, and querying documents.It is fast and standards-compliant by relying on native parsers like libxml2, libgumbo, and xerces.Guiding Principles¶ Someguiding principles Nokogiri
はじめに 確定申告用にAmazonでの買い物履歴が欲しかったのだが、Amazon.jpではCSVとかがなさそうなので、自動で取ってくるスクリプトを書いてみました。 一度に5件(?)以上買い物していると「◯個すべての商品を表示」みたいなリンクが出るのですが、そこは対応していません。Rubyは初心者なので、注文履歴をゲットしてくる処理と、HTMLを読み込んでCSVに変換する処理をわけて書いています。 準備 mechanizeとnokogiriを使用するのでインストールしておきます。 require 'open-uri' require 'mechanize' require 'kconv' agent = Mechanize.new agent.user_agent = 'Mac Safari' url = 'https://www.amazon.co.jp/ap/signin?_encod
読書メーターには、読書記録(読んだ本、積ん読本、読みたい本、本棚など)を外部にファイルとしてエクスポートする機能がありません。Ruby のライブラリ mechanize, nokogiri を使って、読書メーターのサイトをスクレイピングして、データをExcelブックに取り出すプログラムを作りました(bmscrp.rb )。Excelブックの生成にはrubyXL を使い、書誌情報の収集は prallel を使って並列処理しました。 nokogiri がスクレイピングに必須なのは言うまでもありませんが、parallel で並列処理が簡単に記述できるのは、RESTなサイトからデータを収集する時にとても便利です(サイトに負荷をかけないように気をつけないといけませんが)。github で公開しています。以下、README.md からの抜粋です。 Requirementsruby 2.1.8,
久しぶりにアクセスログを見たら、 nokogiri のインストール方法で検索してくる方が結構いらっしゃるようなので、 最新の情報を書いておこうと思います。 # nokogiri に限った問題ではないので、条件によっては他の gem であっても解決するかも。 2015/4/27 追記本稿は、Ruby 2.1.X までを使用している方が対象です。Ruby 2.2.X 以降の場合は、本稿は役に立ちません。たぶん。 TL;DR 原因 & 解決法まとめ 原因: 古いバージョンのrubygems に不具合があり、環境に適した gem を取得できないため [解決法1] 手動でインストールする gem をダウンロードする または [解決法2]rubygems をアップグレードする (おすすめ) [解決法1] 手動でインストールする gem をダウンロードする nokogiri |RubyGems
読んだ本の管理ができる「読書メーター」というサービスにおいて、それぞれの本にどれだけの読者数がいるのかを引っ張ってくるプログラムを書きました。こんな感じで出力されます。Gist : 読書メーターに登録されている本の読者数を取得するスクリプト プログラム作成の動機読書メーターは本好きのためのSNSです。「人」に重きを置いたサービスだと思っています。読んだ冊数の変化がグラフ化されていたり、友達として繋がったりできます。一方で、「本」そのものに着目した機能は少なめです。読み終わった読者の数を追うだけでも、おもしろいデータがとれるのではないかと考えました。 そこで、1日ごとに登録読者数の変化を見てみようと思ったのですが、手動でやるのは思った以上に面倒でした。複数の本の変化を調べないと面白いデータは取れないと思ったのですが、注目する本が増えれば増えるほど手間がかかります。だから、プログラムを書い
RubyのMechanizeとNokogiriで読書メーターをスクレイピングRubyで読書メーターをスクレイピングしたい読書系SNSの読書メーターを利用しています。読書メーター - あなたの読書量をグラフで管理 ユーザー間のコミュニケーションも活発で、お気に入り・お気に入られ(Twitterでいうフォロー・フォロワーの関係)のユーザーとどのくらい同じ本を読んでいるか(このことを共読と呼んでいます)、なんて話題で盛り上がったりしてます。 ユーザー毎のマイページでそういう情報は確認できますが、数字は日々変化しますし、何十人、何百人といると楽な方法が欲しくなります。 あるお気に入りユーザーの方がPerlで共読数などを一括取得するスクリプトを書かれていて、以前それをいただいたんですが、自分の環境ではうまく動かなかったのでどうせなら自分が勉強中のRubyで同じものを書いちまえ、ということで書い
RubyのMechanizeとNokogiriで読書メーターをスクレイピングRubyで読書メーターをスクレイピングRubyで読書メーターをスクレイピングしたい読書系SNSの読書メーターを利用しています。ユーザー間のコミュニケーションも活発で、お気に入り・お気に入られ(Twitterでいうフォロー・フォロワーの関係)のユーザーとどのくらい同じ本を読んでいるか(このことを共読と呼んでいます)、なんて話題で盛り上がったりしてます。 ユーザー毎のマイページでそういう情報は確認できますが、数字は日々変化しますし、何十人、何百人といると楽な方法が欲しくなります。 あるお気に入りユーザーの方がPerlで共読数などを一括取得するスクリプトを書かれていて、以前それをいただいたんですが、自分の環境ではうまく動かなかったのでどうせなら自分が勉強中のRubyで同じものを書いちまえ、ということで書いてみました
Rubyで読書メーターをスクレイピングRubyで読書メーターをスクレイピングしたい読書系SNSの読書メーターを利用しています。読書メーター - あなたの読書量をグラフで管理 ユーザー間のコミュニケーションも活発で、お気に入り・お気に入られ(Twitterでいうフォロー・フォロワーの関係)のユーザーとどのくらい同じ本を読んでいるか(このことを共読と呼んでいます)、なんて話題で盛り上がったりしてます。 ユーザー毎のマイページでそういう情報は確認できますが、数字は日々変化しますし、何十人、何百人といると楽な方法が欲しくなります。 あるお気に入りユーザーの方がPerlで共読数などを一括取得するスクリプトを書かれていて、以前それをいただいたんですが、自分の環境ではうまく動かなかったのでどうせなら自分が勉強中のRubyで同じものを書いちまえ、ということで書いてみました。 共読解析ツールのソースコ
kyodoku.rb `��inU � jnU # -*- coding:utf-8 -*- require 'mechanize' require 'nokogiri' require 'kconv' module HashInitializable def initialize(attributes={}) attributes.each do |name,value| send("#{name}=",value) end end end class HashInitializableStruct def self.new(*arguments) struct = Struct.new(*arguments) struct.send(:include, HashInitializable) struct end end properties = [:id,:name,:user_u
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く