ちゃなんログ

書き散らします。マラソンがしたいです。

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検索処理は汚いし問題ありですがとりあえず動きます

次回は同じ構成でログイン処理を絡めたスクレイピングをしてみようと思います
雑ですがgithub晒しておくのでお気軽に

github.com