「ウェブ・スクレイピング」の版間の差分
Administrator (トーク | 投稿記録) (→.NET) |
|||
(3人の利用者による、間の7版が非表示) | |||
1行目: | 1行目: | ||
− | '''ウェブ・スクレイピング'''([[英語]]:web scraping)とは、[[ウェブ]]上の[[HTML]]などから機械的に[[データ]] | + | '''ウェブ・スクレイピング'''([[英語]]:web scraping)とは、[[ウェブ]]上の[[HTML]]などから機械的に[[データ]]を抜き出すことを言う。単に「スクレイピング」と呼ばれることも多い。 |
==概要== | ==概要== | ||
8行目: | 8行目: | ||
*ウェブスクレイパーでガリガリ解析 | *ウェブスクレイパーでガリガリ解析 | ||
実際には[[ウェブクローラー]]が取得した大量の[[データ]](いわゆる[[ビッグデータ]])から[[データマイニング]]を行う[[プログラム]]的な意味合いが強いが、[[ウェブ魚拓]]的な用途を除けば加工せずに扱うこと自体が非常に稀であるため、[[ウェブクローラー]]と区別するのが面倒なのでクローラーの一部として扱われることが多い。 | 実際には[[ウェブクローラー]]が取得した大量の[[データ]](いわゆる[[ビッグデータ]])から[[データマイニング]]を行う[[プログラム]]的な意味合いが強いが、[[ウェブ魚拓]]的な用途を除けば加工せずに扱うこと自体が非常に稀であるため、[[ウェブクローラー]]と区別するのが面倒なのでクローラーの一部として扱われることが多い。 | ||
+ | |||
+ | リアルタイムに近い挙動をするものであれば、あたかも[[ウェブAPI]]を叩いているかのように利用することができる。 | ||
+ | |||
+ | また、[[AJAX]]の普及などに伴い本来は[[HTML]]上の[[JavaScript]]で取得している非公式の[[ウェブAPI]]を直接的に叩き、[[データ]]を抜き取るような手法も確認されている。 | ||
==手法== | ==手法== | ||
[[プログラミング言語]]でやる場合にもっとも手軽なのは[[正規表現]]でぶっこ抜くという手法である。 | [[プログラミング言語]]でやる場合にもっとも手軽なのは[[正規表現]]でぶっこ抜くという手法である。 | ||
これは極端に言えば古くから[[UNIX]]の[[sedコマンド]]などで行われていたデータ加工となんら変わらない。 | これは極端に言えば古くから[[UNIX]]の[[sedコマンド]]などで行われていたデータ加工となんら変わらない。 | ||
+ | |||
+ | もう少し複雑なものでは専用のHTMLパーサー([[HTML]]を解析できるライブラリ)を使用してぶっこ抜くという手法が用いられる。 | ||
+ | これらは内部的には上記の正規表現を用いたものから、[[XML]]に変換して解析を行うもの、独自の解析を行うものなど様々である。 | ||
+ | |||
+ | さらに既存の[[ウェブブラウザ]]のエンジンである[[Gecko]]や[[WebKit]]などを用いて[[JavaScript]]の挙動まで再現してぶっこ抜くという手法もある。 | ||
+ | たとえば[[.NET Framework]]で[[GeckoFX]]を用いれば「DOMのreadyイベントを待ってから解析を開始する」などといったことができる。 | ||
==主なライブラリ== | ==主なライブラリ== | ||
21行目: | 31行目: | ||
===Ruby=== | ===Ruby=== | ||
*[[Nokogiri]] | *[[Nokogiri]] | ||
+ | |||
===.NET=== | ===.NET=== | ||
+ | *[[AngleSharp]] | ||
+ | *: 最近の流行りらしい。 | ||
*[[Html Agility Pack]] | *[[Html Agility Pack]] | ||
*:かなり精度は高い。手軽。並列処理にも強い。 | *:かなり精度は高い。手軽。並列処理にも強い。 | ||
*[[GeckoFX]] | *[[GeckoFX]] | ||
− | *:[[Firefox]] | + | *:[[Firefox]]そのものを利用する。[[iOS]]や[[Android]]のアプリ開発で頻出する[[WebView]]に類似するもので、[[HTML5]]かつほぼ[[JavaScript]]だけで描画を行っているページですら完璧にぶっこ抜くことが出来てしまう。 |
+ | |||
+ | === その他 === | ||
+ | * [[Selenium]] | ||
+ | *: あらゆる[[言語]]に[[移植]]されているぞ。速度と[[メモリリーク]]させ無視できるなら無敵だ。 | ||
==関連項目== | ==関連項目== |
2022年4月28日 (木) 04:42時点における最新版
概要編集
ウェブスクレイピングとは、日本語に直訳すると「ウェブ削り」であり、ウェブクローラーなどで取得したHTMLなどのデータから余計な部分を削ぎ落とし、目的とする部分を抜き出すソフトウェア、およびそのような行為のことである。
基本的には以下のような手順となる。
- ウェブクローラーで丸ごと保存
- ウェブスクレイパーでガリガリ解析
実際にはウェブクローラーが取得した大量のデータ(いわゆるビッグデータ)からデータマイニングを行うプログラム的な意味合いが強いが、ウェブ魚拓的な用途を除けば加工せずに扱うこと自体が非常に稀であるため、ウェブクローラーと区別するのが面倒なのでクローラーの一部として扱われることが多い。
リアルタイムに近い挙動をするものであれば、あたかもウェブAPIを叩いているかのように利用することができる。
また、AJAXの普及などに伴い本来はHTML上のJavaScriptで取得している非公式のウェブAPIを直接的に叩き、データを抜き取るような手法も確認されている。
手法編集
プログラミング言語でやる場合にもっとも手軽なのは正規表現でぶっこ抜くという手法である。 これは極端に言えば古くからUNIXのsedコマンドなどで行われていたデータ加工となんら変わらない。
もう少し複雑なものでは専用のHTMLパーサー(HTMLを解析できるライブラリ)を使用してぶっこ抜くという手法が用いられる。 これらは内部的には上記の正規表現を用いたものから、XMLに変換して解析を行うもの、独自の解析を行うものなど様々である。
さらに既存のウェブブラウザのエンジンであるGeckoやWebKitなどを用いてJavaScriptの挙動まで再現してぶっこ抜くという手法もある。 たとえば.NET FrameworkでGeckoFXを用いれば「DOMのreadyイベントを待ってから解析を開始する」などといったことができる。
主なライブラリ編集
PHP編集
- Simple HTML DOM Parser
- 重い
- Goutte
- 軽い
Ruby編集
.NET編集
- AngleSharp
- 最近の流行りらしい。
- Html Agility Pack
- かなり精度は高い。手軽。並列処理にも強い。
- GeckoFX