2

私は現在、次のコードを使用して画面スクレイピングを実行しようとしています。

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
HttpWebResponse theResponse = (HttpWebResponse) request.GetResponse();
using (StreamReader reader = new StreamReader(theResponse.GetResponseStream(), Encoding.UTF8))
{
    string s = reader.ReadToEnd();
}

ただし、関係するデータ(HTMLテーブル)は結果の一部ではありません。ページとViewSourceを右クリックすると、気になるHTMLテーブルも表示されませんが、Firebugを使用して検査するとDOMに表示されます。

ajax経由でもロードされていないようです。

つまり、C#を使用して、ViewSourceの結果ではなく、開発者ツールビューに存在するDOMを取得する別の方法はありますか?

残念ながら、このページは公開されていないため、URLを貼り付けることはできません。

4

2 に答える 2

2

ajax経由でもロードされていないようです。

DOMにデータを動的に追加するためにAJAXを使用する必要はありません。標準のJavaScriptを完全にうまく使用できます。

このようなページをスクレイプするには、JavaScriptを処理するスクレーパーが必要です。WinFormsのWebBrowserコントロールがそれを行います。これにより、FireBugの場合と同じように、WebページをロードしてDOMを探索できます(ただし、WebBrowserはIEの単なるラッパーであるため、スナップショットはIEから取得されます)。

ただし、WebBrowserコントロールはマルチスレッド環境(Webアプリケーションなど)で使用するように設計されていないため、そのスクレイピングタスクを実行するにはサードパーティのライブラリを使用する必要があります。

于 2012-06-22T13:02:52.020 に答える
0

FiddlerまたはEtherealを使用して、バックグラウンドで接続されているURLを確認しましたか?バックグラウンドで呼び出されたURLの1つからの応答でHTMLテーブルが見つかった場合は、そのURLからデータを取得できます。どのURL/テーブルを解析しようとしていますか?

于 2012-07-06T18:50:04.983 に答える