HTMLベースのサイトのデータをスクレイピングするためにHtmlAgilityPackを使用しています。フラッシュベースのサイトをスクレイプするためのHtmlAgilityPackのようなDLLはありますか?
4 に答える
それは本当にあなたがスクラップしようとしているサイトに依存します。この点に関して、サイトには2つのタイプがあります。
サイトにswfファイル内のデータがある場合は、swfファイルを逆コンパイルして、内部のデータを読み取る必要があります。十分な作業があれば、おそらくプログラムでそれを行うことができます。ただし、この場合、データはそれほど変更されない可能性があるため、手動でデータを収集する方が簡単な場合があります。
ただし、ほとんどの場合、特に大量のデータがあるサイトでは、フラッシュファイルは実際に外部APIに接続しています。その場合、フラッシュを完全に無視して、APIに直接アクセスできます。よくわからない場合は、Firebugのネットパネルをアクティブにして、ブラウジングを開始してください。外部APIを使用している場合は、明らかになるはずです。
そのAPIを見つけたら、必要なデータを提供するためにAPIを操作する方法をリバースエンジニアリングすることができます。
また、サイトが十分に大きい場合は、同じデータにアクセスするためのフラッシュ以外の方法がある可能性があることにも注意してください。
- モバイルサイト(フラッシュなし)がある可能性があります-iPhoneユーザーエージェントでサイトにアクセスしてみてください。
- クローラー用のサイト(googlebotなど)がある可能性があります-googlebotユーザーエージェントを使用してサイトにアクセスしてみてください。
編集:スクレイピング(特定のサイトから構造化データを取得する)ではなく、クロール(クロールとはランダムなサイトからデータを取得することを意味します)について話している場合、できることはあまりありません。googlebotでさえフラッシュコンテンツをスクレイピングしていません。主な理由は、HTMLとは異なり、flashには、テキストとは何か、リンクとは何かなどをすぐに判断できる標準化された構文がないためです。
HTMLAgilityPackではあまり運がありません。1つの方法は、FiddlerCoreなどを使用してFlashサイトとの間でHTTPリクエストをプロキシすることです。FiddlerCoreプロキシを起動し、C#WebBrowserなどを使用して、スクレイプするURLに移動します。ページが読み込まれると、これらのHTTPリクエストはすべてプロキシされ、その内容を調べることができます。ただし、Flash内では静的であることが多いため、ほとんどのテキストは取得されません。代わりに、通常は別々に保存される、ほとんどの場合、より大きなコンテンツ(ビデオ、オーディオ、場合によっては画像)を取得します。これは、実際にブラウザでページを実行/実行する必要があるため、従来のスクレイピング/クロールに比べて遅くなります。
これらすべてのYouTubeDownloaderタイプの拡張機能に精通している場合、それらは、個別のプロキシではなくFireFoxからのHTTPリクエストを直接インターセプトすることを除いて、これと同じプリンシパルで機能します。
グーグルといくつかの大きな検索エンジンはAdobe/Flashと特別な取り決めを持っており、検索エンジンのクローラーがグーグルが依存しているテキストやものをもっと見ることができるソフトウェアが提供されていると思います。PDFコンテンツについても同じことが言えます。このソフトウェアのいずれかが公開されているかどうかはわかりません。
Flash コンテンツのスクレイピングは非常に複雑であり、スクレイピングを主張するコンポーネントの信頼性はせいぜい疑わしいものです。ただし、Web ページの Flash アニメーションで「クロール」またはハイパーリンクをたどりたい場合は、Infantでうまくいく可能性があります。Infant は Web クロール用の無料の Java ライブラリであり、限られた / ベストエフォート型の Flash コンテンツのハイパーリンクをたどる機能を提供します。Infant はオープンソースではありませんが、個人および商用利用は無料です。登録不要!
ページ全体を画像としてキャプチャし、ページでOCRを実行してデータを読み取るのはどうですか