2009-05-27 18 views
0

Ist es möglich, Code zu schreiben, der einen regulären Ausdruck oder XPath erzeugt, der Links basierend auf einem HTML-Dokument analysiert?Selbstlernender Ausdruck für reguläre Ausdrücke oder xpath?

Was ich will, ist eine Seite für einige Links zu analysieren. Das einzige, was ich weiß, ist, dass die meisten Links auf der Seite diese Links sind.

Für ein einfaches Beispiel nehmen Sie eine Google-Suchergebnisseite, zum Beispiel this. Die Mehrheit der Links ist aus den Suchergebnissen und sieht ungefähr wie folgt aus:

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

Ist es möglich, Code zu schreiben, das lernt und erkennt dies und ist in der Lage alle Links zu analysieren, auch wenn Google ihre Präsentation ändert?

Ich denke darüber nach, alle Links zu analysieren und vor und nach jedem Tag nach X-Zeichen zu suchen und dann davon zu arbeiten.

Ich verstehe, dass dies auch mit XPath getan werden könnte, aber die Frage ist immer noch die gleiche. Kann ich diesen Inhalt analysieren und einen gültigen XPath generieren, um die serp-Links zu finden?

+0

uh ... wird der Link nicht immer href = "etwas" sein? – dss539

Antwort

0

Wie ich sie verstehe, funktionieren die meisten maschinellen Lernalgorithmen am besten, wenn sie viele Beispiele haben, aus denen sie ein "intelligentes" Verhalten verallgemeinern. In diesem Fall haben Sie nicht viele Beispiele. Google wird ihr Format wahrscheinlich nicht oft ändern. Auch wenn es sich oft anfühlt, ist es wahrscheinlich nicht genug für einen maschinellen Lernalgorithmus.

Es kann einfacher sein, das aktuelle Format zu überwachen, und wenn es sich ändert, ändern Sie Ihren Code. Wenn Sie das erwartete Format als konfigurierbaren regulären Ausdruck festlegen, können Sie das neue Format erneut bereitstellen, ohne den Rest des Projekts neu erstellen zu müssen.

+0

Ja, das ist der Ansatz den ich gerade benutze und ich bleibe dabei. Vielen Dank – alexn

0

Wenn ich Ihre Frage verstehe, ist es wirklich nicht notwendig, einen Lernalgorithmus zu schreiben. Reguläre Ausdrücke sind mächtig genug, um dies aufzuheben. Sie können mit dem folgenden regulären Ausdruck alle Links in einer HTML-Seite erhalten:

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

Verifiziert in Regex Hero dieser regulären Ausdruck verwendet eine positive Lookbehind und positive Vorschau die URL innerhalb von href = „“ zu greifen.

Wenn Sie einen Schritt weiter gehen möchten, können Sie auch nach dem Anker-Tag suchen, um sicherzustellen, dass Sie einen tatsächlichen Anker-Link bekommen und nicht einen Verweis auf eine CSS-Datei oder etwas. Sie können das tun, wie folgt:

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

Dies sollte funktionieren, solange die Seite des href folgt = „“ Konvention für die Links. Wenn sie Onclick-Ereignisse verwenden, wird alles komplizierter, da Sie mit der Unberechenbarkeit von Javascript umgehen müssen. Selbst Google krabbelt keine Javascript-Links.

Hilft das?