/ / Regulärer Ausdruck zum Filtern von URLs mit mehr als einem kaufmännischen Und "&" - Java, Regex, Nutch

Regulärer Ausdruck zum Filtern von URLs mit mehr als einem kaufmännischen Und-Zeichen "&" - java, regex, nutch

Ich benutze einen Web-Crawler (genannt Nutch), der das Web durchsucht, wenn ich ein paar URLs einspeise. Ich habe bestimmte Filter für reguläre Ausdrücke festgelegt, um den Crawler auf bestimmte Domänen und bestimmte Filter zu steuern.

# skip URLs containing a back slash

-[\]

# skip URLS containing more than 6 levels

-^http://([a-zA-Z.-]+)/(?:[^/]+/){6,}.*$

# crawl only domain abc

+^http://www.abc.xx.yyy.zzz/pubs/([a-z]+)

Problem: Innerhalb der spezifischen Domain durchsucht mein Crawler alle Suchformular-URLs mit allen Paginierungs- und Abfrageparametern, die ich nicht möchte. Beispiele sind:

http://www.abc.xx.yyy.zzz/pubs/biblio_results.asp?Library=ABC&SubjectScope=keyword&SubjectMode=contains&SubjectText=abc_archive&URLs=yes&Order=year&SortOrder=DESC&Abstracts=no

Ich bin nicht sicher, wie ich einen regulären Ausdruck festlegen soll, damit mein Crawler eine solche URL wie die im obigen Beispiel ignoriert, deren URL-Pfad mehr als ein "&" -Zeichen enthält.

Ist es eine gute Idee, solche URLs beim Erstellen einer Suchmaschine zu ignorieren?

Antworten:

3 für die Antwort № 1

Deine Zeile in der Nutch-Konfiguration sollte lauten

-&.*&

Dies weist Nutch an, alles mit zwei oder mehr zu überspringen & Zeichen und eine beliebige Anzahl von Zeichen dazwischen.

Ob es eine gute Idee ist, solche URLs zu ignorierenDies hängt vom Zweck Ihrer Suchmaschine und der Art der URLs in der Domain ab, die Sie durchsuchen. Es ist unmöglich, den letzten Satz Ihrer Frage zu beantworten, ohne die Problemdomain zu verstehen.


3 für die Antwort № 2

Fügen Sie diesen negativen Lookahead nach dem Kopf des Stringankers ein ^

(?![^&]*&){2}

Erklären Regex

(?!                      # look ahead to see if there is not (2
# times):
[^&]*                  #   any character except: "&" (0 or more
#   times (matching the most amount
#   possible))
&                      #   "&"
){2}                     # end of look-ahead

1 für die Antwort № 3

Da Sie scheinbar URLs finden, die den jeweiligen Anforderungen entsprechen, und danach filtern, ist es ziemlich einfach, URLs zu finden, die 2 & s enthalten.

(&.*&)+

Das passt zu allem, was eine Sequenz mit mindestens 2 Et-Zeichen enthält