要素数の変化に対応したスクレイピング技法

はじめに

スクレイピングをする際、以下のようにセレクタで要素を選び、取得する内容や属性を指定するやり方が最も基本的な方法です。

 

※phpのライブラリ「Goutte」を使って説明します。

 

オブジェクト内に要素自体が存在しない場合等のエラーは回避策があるので問題を解消できますが、コーディングでは回避できない問題点があります。

問題点:テーブルの行数の変化に対応できない

例えば複数ページに渡って以下のようなテーブル要素があったとします。このテーブル内の「出身」の情報のみを抜き出したい場合に

 

性別 男性
年齢 30歳
出身 東京都
趣味 サッカー

 

以下のような記述になると思います。(id、classがtable内に存在しないケースを想定)

 

 

ただし、このテーブル内の行数が必ずしも全ページで同じとは限りません。よくあるケースですが空の値の項目は可読性を高めるために非表示されていたりします。

 

性別 男性
年齢 30歳
趣味 サッカー

 

この場合、上記のコードでは趣味の情報を取得してしまうことになります。行数のチェックをif分岐する方法もありますが複雑なパターンになればなるほど一苦労です。取得ページ数が大量にある場合、パターンの確認を行うのも骨の折れる作業です。

解決策

phpのgoutteの場合、extractという非常に便利な関数が用意されています。指定した要素のテキストや属性の値を一度にすべて取得して配列に格納してくれる優れものです。

 

 

キー名に日本語を使用していますが違和感のある方は以下のようにすれば問題ありません(ループの中で必要な値を取り出してください)

 

※dl要素に対しても同じように使えます。

まとめ

いかがでしょうか。コード量もだいぶすっきりします。予期せぬエラーを引き起こさないためにもよほどの理由がない限り、この方法で取得するのがベターです。

関連キーワード
  • Nokogiri(Ruby)のインストール方法 #001
  • 要素数の変化に対応したスクレイピング技法
    要素数の変化に対応したスクレイピング技法 〜 table要素編 〜
  • 【Goutte(PHP7)】フォーム送信に必要なデータを調べる方法 #003
    【Goutte(PHP7)】フォーム送信に必要な情報を調べる方法 #003
  • Goutte(PHP7)を使ってみる
    Goutte(PHP7)を使ってみる #002
  • Goutte(PHP7)のインストール方法
    Goutte(PHP7)のインストール方法 #001
  • Goutte使い方
    Goutte(PHP7)でスクレイピングする【完全マニュアル】
Webクローラー、スクレイピングに関してお困りではありませんか?

DIGは他者に断られるような高度なサイト構造&セキュリティ(SPA、IP分散、画像や文字認証の突破)に対しての対策を最も得意としています。

「このサイトはクローリング、自動操作が可能か」等のご相談から技術的なご質問までクローリング、自動化に関してはどんな内容でも構いません。お気軽にお問い合わせください。

 

お問い合わせ
2018-02-17 18:43
下記フォームにご入力の上、送信ボタンを押してください ※【送信】をクリックすることで、弊社のプライバシーポリシーに同意、読んだものとします。...

 






おすすめの記事
DIGについて
前文 DIGでは、利用者の皆様がより便利に サービスをご利用できますよう、個人情報のご提供をいただくことがございます。 DIGは、個人情報の...
DIGについて
まずはじめに はじめまして。DIGと申します。 上場IT企業の部長職を経てフリーランスになりました。Webクローラーの開発・運用を行なってい...
DIGについて
下記フォームにご入力の上、送信ボタンを押してください ※【送信】をクリックすることで、弊社のプライバシーポリシーに同意、読んだものとします。...