HTMLを取得した後にデータをロードしているある種のフラッシュプラグインを持つWebサイトをスクレイピングしようとしています。次のオブジェクトがページで受信されます
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" WIDTH="250" HEIGHT="20" id="Preloader"><PARAM NAME="movie" VALUE="/images/preloader.swf">
<PARAM NAME="quality" VALUE="high">
<PARAM NAME**strong text**="bgcolor" VALUE="#FFFFFF"><EMBED src="/images/preloader.swf" quality="high" bgcolor="#FFFFFF" WIDTH="250" HEIGHT="20" NAME="Preloader" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT>
Wireshark で受信しているデータを見つけようとしましたが、うまくいきませんでした。このフラッシュ プラグインまたはその仕組みに関する私の知識はゼロです。私はこれを行うことができないという最悪のシナリオを推測しています。
HttpWebRequest mainRequest = (HttpWebRequest)(WebRequest.Create(URL));
mainRequest.Method = "GET";
mainRequest.Proxy = null;
WebResponse mainResponse = mainRequest.GetResponse();
StreamReader dataReader = new StreamReader(mainResponse.GetResponseStream(), System.Text.Encoding.UTF8);
string data = dataReader.ReadToEnd();
dataReader.Close();
mainResponse.Close();
return data;
このデータを受信する方法、またはデータが受信される前にデータが html に注入されるのを Web 応答で待機させる方法を知っている人はいますか? どんな助けでも大歓迎です。
更新: フラッシュ オブジェクトで銃を少しジャンプさせたようです。これは、テーブルにデータが入力されている間の単なる読み込みアニメーションだと思います。私はフィドラーを使って何が起こっているのかを見てきました。ページは、読み込み中の div と内部に含まれる flash オブジェクトを含むリクエストの後に返されます。数秒後、データの準備が整うと、別のページがデータとともに返されます。私が覚えていることから(私は家にいないので、今は確認できません)、新しいページには元のページと同じリクエストヘッダーがあります。フィドラーにはjsonまたはajaxデータはありません。私が見ることができる更新を引き起こすスクリプトがクライアントにありません。これが更新される原因がわかりません。
Web ブラウザー オブジェクトを簡単に確認しましたが、約 200 ページをスクレイピングすると、現在 1 分ほどかかるため、これはかなりのパフォーマンス ヒットになると思います。後で amf ビューアーを試して、フラッシュ オブジェクトが更新元ではないことを確認します。
テーブルの準備ができたときに、サーバーがこのページを再送信していると推測しています。サーバーが読み込み中の div を見つけて、これをデータのテーブルに置き換えると、ページ全体が再送信されますか? または、これは ajax/json データに表示されませんか? サーバーがデータを再送信している場合、新しいページを送信する準備ができるまで応答を開いたままにしておくにはどうすればよいですか?
ありがとう。JM。