16

次のように機能する特定のWebページをスクレイプしようとしています。

最初にページが読み込まれ、次に何らかのjavascriptが実行されて、ページに入力するために必要なデータがフェッチされます。そのデータに興味があります。

HtmlAgilityPackを使用してページを取得すると、スクリプトが実行されないため、基本的にほとんど空白のページが取得されます。

データを取得できるように、スクリプトを強制的に実行する方法はありますか?

4

2 に答える 2

17

サーバーが返しているものを取得しています-Webブラウザーと同じです。もちろん、Webブラウザがスクリプトを実行します。Html Agility PackはHTMLパーサーのみであり、JavaScriptを解釈したり、ドキュメントの内部表現にバインドしたりする方法はありません。スクリプトを実行する場合は、Webブラウザが必要になります。あなたの問題に対する完璧な答えは、完全な「ヘッドレス」ウェブブラウザでしょう。これは、HTMLパーサー、javascriptインタープリター、およびブラウザーDOMをシミュレートするモデルを組み込んだものであり、すべてが連携して機能します。基本的に、レンダリング部分がない場合を除いて、これはWebブラウザです。現時点では、.NET環境内で完全に機能するようなものはありません。

最善の策は、WebBrowserコントロールを使用し、プログラムによる制御の下でInternetExplorerでページを実際に読み込んで実行することです。これは速くもきれいでもありませんが、あなたがする必要があることをします。

同様の質問に対する私の回答も参照してください。DOMをロードし、サーバー側でjavascriptを実行します。.Netでは、これを行うために.NETで利用可能なテクノロジについて説明しています。ほとんどの部分は現在存在しますが、残念ながら、まだ完全には存在しないか、正しい方法で統合されていません。

于 2012-07-09T12:15:24.090 に答える
3

これにはAwesomiumを使用できます。http //www.awesomium.com/ 。それはかなりうまく機能しますが、x64をサポートしておらず、スレッドセーフではありません。私はそれを使っていくつかのウェブサイトを24時間年中無休でスキャンしていて、少なくとも2、3日続けて正常に動作していますが、通常はクラッシュします。

于 2014-01-27T08:07:48.700 に答える