次のように機能する特定のWebページをスクレイプしようとしています。
最初にページが読み込まれ、次に何らかのjavascriptが実行されて、ページに入力するために必要なデータがフェッチされます。そのデータに興味があります。
HtmlAgilityPackを使用してページを取得すると、スクリプトが実行されないため、基本的にほとんど空白のページが取得されます。
データを取得できるように、スクリプトを強制的に実行する方法はありますか?
次のように機能する特定のWebページをスクレイプしようとしています。
最初にページが読み込まれ、次に何らかのjavascriptが実行されて、ページに入力するために必要なデータがフェッチされます。そのデータに興味があります。
HtmlAgilityPackを使用してページを取得すると、スクリプトが実行されないため、基本的にほとんど空白のページが取得されます。
データを取得できるように、スクリプトを強制的に実行する方法はありますか?
サーバーが返しているものを取得しています-Webブラウザーと同じです。もちろん、Webブラウザがスクリプトを実行します。Html Agility PackはHTMLパーサーのみであり、JavaScriptを解釈したり、ドキュメントの内部表現にバインドしたりする方法はありません。スクリプトを実行する場合は、Webブラウザが必要になります。あなたの問題に対する完璧な答えは、完全な「ヘッドレス」ウェブブラウザでしょう。これは、HTMLパーサー、javascriptインタープリター、およびブラウザーDOMをシミュレートするモデルを組み込んだものであり、すべてが連携して機能します。基本的に、レンダリング部分がない場合を除いて、これはWebブラウザです。現時点では、.NET環境内で完全に機能するようなものはありません。
最善の策は、WebBrowser
コントロールを使用し、プログラムによる制御の下でInternetExplorerでページを実際に読み込んで実行することです。これは速くもきれいでもありませんが、あなたがする必要があることをします。
同様の質問に対する私の回答も参照してください。DOMをロードし、サーバー側でjavascriptを実行します。.Netでは、これを行うために.NETで利用可能なテクノロジについて説明しています。ほとんどの部分は現在存在しますが、残念ながら、まだ完全には存在しないか、正しい方法で統合されていません。
これにはAwesomiumを使用できます。http : //www.awesomium.com/ 。それはかなりうまく機能しますが、x64をサポートしておらず、スレッドセーフではありません。私はそれを使っていくつかのウェブサイトを24時間年中無休でスキャンしていて、少なくとも2、3日続けて正常に動作していますが、通常はクラッシュします。