2009-05-27 11 views
0

正規表現を生成するコードや、HTML文書に基づいてリンクを解析するXPathを記述することはできますか?自己学習の正規表現またはxpathクエリですか?

私が望むのは、一部のリンクのページを解析することです。私が知っている唯一の事は、ページ上のリンクの大部分がそれらのリンクであるということです。

簡単な例として、Google検索エンジンの結果ページ(例:this)をご覧ください。リンクの大半は、検索結果からのものであり、このようなものになります。

<h3 class="r"><a onmousedown="return rwt(this,'','','res','1','AFQjCNERidL9Hb6OvGW93_Y6MRj3aTdMVA','')" class="l" href="http://stackoverflow.com/"><em>Stack Overflow</em></a></h3> 

それはGoogleが彼らのプレゼンテーションを変更しても、これを学習し、これを認識し、すべてのリンクを解析することができ、コードを書くことは可能ですか?

私はすべてのリンクを解析し、各タグの前後にXの文字を見て、それから作業することを考えています。

これもXPathで行うことができると私は理解していますが、問題は同じです。このコンテンツを解析し、有効なXPathを生成してserpリンクを見つけることはできますか?

+0

uh ...リンクは常にhref = "something"ですか? – dss539

答えて

0

私が理解しているように、ほとんどの機械学習アルゴリズムは、「インテリジェントな」行動を一般化する多くの例があるときに最も効果的です。この場合、多くの例はありません。 Googleは形式を頻繁に変更する可能性は低いです。たとえそれが私たちにしばしば感じられるとしても、機械学習アルゴリズムにとってはおそらく十分ではありません。

現在の形式を監視する方が簡単かもしれません。変更があった場合は、コードを変更してください。予想される形式を構成可能な正規表現にすると、残りのプロジェクトを再構築せずに新しい形式を再展開できます。

+0

ええ、これは私が現時点で使用しているアプローチです。私はそれに固執するつもりです。ありがとう – alexn

0

私はあなたの質問を理解すれば、本当に学習アルゴリズムを書く必要はありません。正規表現はこれを拾うのに十分強力です。あなたは次の正規表現でHTMLページ内のすべてのリンクを取得することができます:

Regex Heroで検証
(?<=href=")[^"]+(?=") 

、この正規表現は=「」HREFの内側にURLをつかむために肯定後読みと肯定先読みを使用しています。

これをさらに進めたい場合は、アンカータグを探して、実際のアンカーリンクを取得し、CSSファイルなどの参照を取得しないようにすることもできます。

(?<=<a[^<]+href=")[^"]+(?=") 

これは、ページがリンクのhref = ""規則に従っている限り、正常に動作するはずです。彼らがonclickイベントを使用している場合は、Javascriptの予測不可能性に対処するため、すべてがより複雑になります。 GoogleでもJavascriptのリンクをクロールしません。

これは役に立ちますか?