0

私は、検索用語と、未知の検索エンジンの検索結果を表すページのHTMLソース(実際には、ブログ、ショップ、Google、eBayなど)を指定して、プログラムを作成する必要があります。 「結果の内容」を含む結果のデータ構造を構築する必要があります:検索結果のタイトル、「詳細」リンク、結果内の位置など。結果ページに次のデータが含まれているかどうかは不明です。すべて、および検索結果があるかどうか。目標は、意味を抽出する別のプログラムにデータ構造をフィードすることです。

私が探しているのは、BeautifulSoupやRegExpではなく、HTMLソースの解釈方法に関するいくつかの巧妙なアイデアやアルゴリズムです。ページのどの部分が単一の結果アイテムを構成しているかを調べるにはどうすればよいですか?重要なビットを抽出するためにマークアップノイズをフィルタリングするにはどうすればよいですか?あなたならどうしますか?私がやろうとしていることをカバーする研究分野へのポインタは非常に高く評価されています。

ありがとう、サイモン

4

1 に答える 1

0

トレーニングなしで任意の検索クエリ出力で機能する特効薬アルゴリズムが存在するとは思えません。

ただし、このタスクは解決可能であり、実際には多くのアプリケーションで解決されていますが、アプローチは異なります。最初に、実際に何をしようとしているかに基づいて、単一の検索結果アイテムの一般的な構造を定義する必要があります (名前、日付、リンク、説明スニペットなど)。次に、必要な抽出を行う HTML パーサーの数を記述します。特定の Web サイトの検索結果出力から必要なフィールド。

私はそれが非常にセクシーな解決策ではないことを知っていますが、おそらくそれが機能する唯一のものです. そしてそれはロケット科学ではありません。パーサーの作成は、実際には非常に簡単で、1 日に数十個作成できます。検索結果の html ソースを調べてみると、通常、出力結果は非常に構造化されており、特定のdivセクションまたはクラス属性でマークされていることがわかります。そのため、ドキュメント内で見つけるのは非常に簡単です。そのために複雑な HTML 解析ライブラリを使用する必要さえありません。grep のようなもので十分です。

たとえば、この特定のページでは、質問は で始まり、<div class="post-text">で終わり</div>ます。間にあるものはすべて、実際には HTML 形式の投稿テキストであり、余分なスペースや "\n" と共に削除する必要がある場合があります。そして、これ<div class="post-text">はページに一度だけ表示されます。

検索アプリケーションを大規模に展開すると、さまざまなサイトにさまざまな検索エンジンがそれほど多くないことがわかり、同様の検索エンジンを使用するスタイル用に既に作成されたパーサーを再利用できるようになります。

覚えておく必要があるのは、組み込みのセルフテストだけです。サイトは、時々アップグレードしてデザインを変更する傾向があります。アプリケーションがしばらく存続する場合は、結果の有効性をチェックし、検索出力が変更され、パーサーとの互換性がなくなるたびに通知するロジックをパーサーに含める必要があります。次に、特定のパーサーを変更するか、新しいパーサーを作成する必要があります。

お役に立てれば。

于 2010-08-12T07:48:00.607 に答える