0

スクレイピングしたいデータの一部は、JavaScript ページ内に含まれています。次のパターンに似ています。

<script type="text/javascript">
        arrayName["field1"] = 12;
        arrayName["field2"] = 42;
        arrayName["field3"] = 1442;
</script>
<script type="text/javascript">
        arrayName["field4"] = 62;
        arrayName["field5"] = 3;
        arrayName["field6"] = 542;
</script>

それは他の多くの Javascript と混ざり合っています。これらの値を取得する必要があります。

私は次のように始めました:

var dom = CQ.CreateFromUrl("http://somesite.xxx");

CQ script = dom["script[type='text/javascript']"];

しかし、私は今、このデータを取得する方法を考えることができません. 正規表現を作成してすべてをループする唯一の方法ですか、それともパフォーマンスが向上する別の方法がありますか?

実際の JavaScript コードで CSS セレクターを使用する方法がわかりません。別のアプローチを試す必要がありますか?

4

2 に答える 2

0

サーバー側の Javascript エンジンを本当に探しているようです - CsQuery はスクリプト タグの内容を簡単に取得できますが、実際にスクリプトを実行してから、作成されたエンティティを参照できるようにする必要があります。理論的には、スクリプトの行を解析するためにある種のクエリ言語を作成することもできますが、実際には、それは基本的に実行するだけです。単純な代入を含む特定の行だけを取り出す必要があり、コンテキストが重要でない場合は、必要なものを除外するために正規表現 (または grep) のような単純なものを見ている可能性があります。

私は Neosis V8 ラッパー ( http://javascriptdotnet.codeplex.com/ ) を nuget で Neosis.Javascript として使用しました。

これは何よりも高速です (ボンネットの下で Google の V8 エンジンを使用しているため)。唯一の本当の欠点は、それが純粋な .NET ソリューションではないということですが、一度設定すると、かなり簡単です。それを使用する例は、JsHint を実行するために使用する私のプロジェクトhttps://github.com/jamietre/SharpLinterにあります。

Jint、IronJS、Jurassic など、さまざまな 100% .NET Javascript エンジンがあります。以前にジュラシックを使用したことがありますが、バイトコードにコンパイルされるため、おそらく最速です。意外と完成度は高いのですが、積極的に開発されているわけではないので、あまり支持を得るのは難しいかもしれません。しかし、それらはすべて V8 よりもはるかに遅く、.NET 以外の参照がないこと以外に真の利点はありません。

100% .net にする必要がある場合を除き、JavscriptDotNet を使用してください。

于 2014-10-29T17:34:54.997 に答える