Capybara+Selenium+Headless Chromeでスクレイピング
なんです
前回の記事でHeadless Chromeでスクショを撮るところまでを行いましたが、今回は実際に簡単なスクレイピングを行い、DOM要素にアクセスしたいと思います
テストには 阿部 寛の映画出演 こちらのページを使用させていただきます
やること
- ページ下部の出演映画テーブルをスクレイピングしブラウザに表示する
サンプルコード
前回のスクリーンショットを撮る際に使用したソースに以下を追記します
url = 'http://abehiroshi.la.coocan.jp/movie/eiga.htm' @movies = session.find_all('table')[1] .find_all('tr').each_with_object(Hash.new { |hash, key| hash[key] = [] }) do |title, result| result['titles'].push(title.text) end slim :index
doctype html html head title Sample body - @movies['titles'].each do |title| p #{title}
slimが好きなのでslimで書いてますがハイライトがなかったです
辛かったこと
- 対象ページのDOMにはclassがほぼない
- class指定によるDOM検索ができないのでhtml要素を直接findしなくてはいけなかった
- 対象ページにtableタグが複数あった
- これに気づかずfindで検索をしていたがtableが2つあったため、エラーをはかれた
正直、DOM検索処理は汚いし問題ありですがとりあえず動きます