0

クロールされたページからさまざまな種類のデータを抽出するためにさまざまなクエリを実行できる必要があるクローラーを作成しようとしています。私はデータを抽出するために CsQuery を調べてきました。

h4:contains('文字列')

私の問題は、次のような複雑なクエリを評価できる必要があることです。

["h4:contains('textstring')"].Parent().Parent().Find("div").Find("span").Text();

私はまだ素晴らしい解決策を見つけていません。CsQuery は上記を簡単に実行できますが、コードに記述した場合に限り、データベースに保存されたクエリを実行できるようにする必要があるため、クエリを動的に読み込んで実行できる必要があります。私の現在の最善のアイデアは、再帰関数が一度に 1 ドットずつステートメントを通過するようにすることですが、上記のクエリを実行できるようにするために関数を 6 回呼び出すことになります。また、CsQuery に既に存在する機能を作成することになるようですが、問題を解決するためのより洗練された方法がわかりません。

どんなアイデアでも大歓迎です。

4

1 に答える 1

0

これを行うにはいくつかの方法があります。まず、リフレクションと正規表現を使用して、C# 文字列をデータベースから式に変換できます。これを行うための小さなプロジェクトがたくさんあります。別のオプションは、iron python や jint などのスクリプト環境をホストし、それらのいずれかを使用して式を記述することです。3 番目のオプションは、codedom を使用し、保存された文字列を評価してからアセンブリに変換することです。各オプションには長所と短所があります。

最初のオプションは、非常に遅くなるリフレクションを使用します。ただし、ネイティブで c# を使用できます。2 番目のオプションでは、まったく別の言語を使用し、スクリプト環境をセットアップする必要があります。しかし、プログラマーでなくても式を開発する方が簡単な場合があります。3 番目のオプションでは、式が変更されるたびに新しいアセンブリを作成する必要がありますが、アンロードできません。しかし、このオプションはおそらく処理速度が全体的に最速です。

個人的には、Web フォークの学習曲線を抑えるために jint をホストします。必要なのが適切な CLR と csquery ライブラリへのアクセスだけであれば、環境のセットアップはかなり簡単です。

于 2014-04-05T12:33:05.193 に答える