Ich suche nach einer zuverlässigen Methode zum Extrahieren von Text mit der Webadresse in ASP.NET/C#. Kann mir jemand die richtige Richtung zeigen?
Auch könnte die Webadresse eine Nachrichtenseite sein, die viele Anzeigen und Menüs usw. haben könnte. Ich brauche eine intelligente Möglichkeit, nur den relevanten Inhalt zu extrahieren. Nicht sicher, wie dies getan werden könnte, wie würde ich definieren, welche Relevanz ist?
Sollte ich vielleicht aus einem RSS-Feed lesen? Irgendwelche Gedanken dazu?
BEARBEITEN Ich habe eine Prämie hinzugefügt. Ich möchte "relevanten" Text von einer URL extrahieren. Von "relevant" meine ich, dass es Text von Anzeigen (und anderen irrelevanten Informationen) ausschließen sollte. Die Eingabe wird einer Nachrichtenseite ähnlich sein. Ich muss nur die Nachrichteninformationen extrahieren und den überflüssigen Text loswerden
Nachdem Sie die Seite heruntergeladen und eine HTML-Bibliothek wie HTML Agility Pack verwendet haben, beginnt Ihre Arbeit mit:)
Screen Scraping ist in zwei Teile geteilt.
Zuerst der Webcrawler (viele Informationen dazu im Web und einfacher Code, der hier mit anderen WebClient-Antworten bereitgestellt wird). Der Crawler muss Links durchlaufen und Seiten herunterladen. Wenn Sie viele Seiten herunterladen und die Start-URL haben, können Sie Ihre eigenen Rollen erstellen oder eine vorhandene URL verwenden. In Wikipedia finden Sie eine Liste mit Open Source Webcrawlern / Spidern.
Der zweite Teil besteht darin, den HTML-Code zu analysieren und nur den gewünschten Text herauszufiltern und dabei jegliches Rauschen (Kopfzeilen, Banner, Fußzeilen usw.) auszulassen. Einfaches Durchlaufen des DOM ist mit vorhandenen Bibliotheken einfach, herauszufinden, was mit dem zu tun ist, was Sie analysieren, ist der schwierige Teil.
Ich habe ein bisschen darüber geschrieben, bevor es bei einem anderen SO Frage und es könnte Ihnen einige Ideen geben, wie Sie den gewünschten Inhalt manuell erfassen können. Aus meiner Erfahrung gibt es keine 100% Möglichkeit, den Hauptinhalt einer Seite zu finden, und meistens müssen Sie manuell einige Hinweise geben. Der schwierige Teil ist, dass, wenn sich das HTML-Layout der Seite ändert, der Screen Scraper nicht mehr funktioniert.
Sie können Statistiken anwenden und den HTML-Code mehrerer Seiten vergleichen, um daraus abzuleiten, wo sich die Anzeigen, Menüs usw. befinden, um diese zu eliminieren.
Da Sie Newssites erwähnen, gibt es zwei andere Ansätze, die einfacher auf diese Sites angewendet werden sollten, als den Text aus dem ursprünglichen HTML zu analysieren.
Sehen Sie sich auch The Easy Way to Extract an Nützlicher Text aus Arbitrary HTML für die Eingabe eines generellen Parsers. Der Code ist in Python, aber Sie sollten in der Lage sein, es ohne zu viel Mühe zu konvertieren.
Ich denke, Sie brauchen einen HTML-Parser wie HTMLAgilityPack oder Sie können das neue Baby verwenden. YQL, ein neues Werkzeug von Yahoo entwickelt seine Syntax ist wie SQL und Sie brauchen ein wenig Wissen über XPATH ...
Danke
Verwenden Sie eine WebClient Instanz, um Ihr Markup zu erhalten ...
%Vor%Und dann verwenden Sie das HtmlAgilityPack , um die Antwort mit XPath zu analysieren. .
%Vor%Um das tatsächliche HTML-Markup zu erhalten, versuchen Sie das WebClient-Objekt. So etwas wird dir das Markup bringen:
%Vor%Dann können Sie wie bei isc-fausto reguläre Ausdrücke verwenden, um die Ausgabe nach Bedarf zu parsen.
Textverdichtungstechniken sind wahrscheinlich das, wonach Sie suchen. Aber als grobe Heuristik können Sie dies mit relativ einfachen Schritten tun, solange Sie nicht ständig auf 100% perfekte Ergebnisse zählen.
Solange Sie keine Schreibsysteme unterstützen müssen, die keine Leerzeichen zwischen Wörtern haben (Chinesisch, Japanisch), können Sie ziemlich gute Ergebnisse erzielen, wenn Sie nach den ersten paar Durchläufen einer aufeinanderfolgenden Wortfolge mit einem willkürliche Schwelle, die Sie ein paar Tage tuning verbringen werden. (Chinesisch und Japanisch würden zusätzlich zu dieser Heuristik einen sinnvollen Algorithmus zur Erkennung der Worttrennung benötigen.)
Ich würde mit einem HTML-Parser beginnen (HTML Agility Pack in Dotnet oder etwas wie Rubys Nokogiri oder Pythons BeautifulSoup, wenn Sie mit den Algorithmen in einer interaktiven Umgebung experimentieren möchten, bevor Sie sich Ihrer C # -Lösung widmen). p>
Um den Suchraum zu reduzieren, verwenden Sie die Funktionen Ihres HTML-Parsers, um Links mit wenig oder keinem umgebenden Text zu verknüpfen. Das sollte die meisten Navigationsfelder und bestimmte Arten von Anzeigen beseitigen. Sie könnten dies weiter ausdehnen, um nach Links zu suchen, die Wörter nach ihnen haben, aber keine Interpunktion; dies würde beschreibende Links eliminieren.
Wenn Sie beginnen, Text zu sehen, gefolgt von "." oder "," mit sagen wir, 5 oder mehr Wörter (die Sie versuchen können, später zu tun), würden Sie anfangen, das als einen möglichen Satz oder Satzfragment zu bewerten. Wenn Sie mehrere Läufe in einer Reihe finden, hat das ziemlich gute Chancen, der wichtigste Teil der Seite zu sein. Sie könnten Text mit <p>
-Tags um ein bisschen höher punkten. Sobald Sie eine Menge dieser Arten von Sequenzen haben, sind die Chancen ziemlich gut, dass Sie "Inhalt" anstelle von Layout-Chrom haben.
Dies ist nicht perfekt, und Sie müssen möglicherweise einen Mechanismus hinzufügen, um die Heuristik basierend auf problematischen Seitenstrukturen, die Sie regelmäßig scannen, anzupassen. Aber wenn Sie etwas basierend auf diesem Ansatz erstellen, sollte es ziemlich vernünftige Ergebnisse für etwa 80% Ihrer Inhalte liefern.
Wenn Sie diese Art von Methode als nicht adäquat empfinden, sollten Sie sich die Bayessche Wahrscheinlichkeits- oder Hidden-Markov-Modelle ansehen, um die Ergebnisse zu verbessern.