Wie zum extrahieren von text aus erschwingliches sane HTML?
Meine Frage ist in der Art, wie diese Frage aber ich habe mehr Einschränkungen:
- Ich weiß, das Dokument ist einigermaßen gesund
- Sie sind sehr regelmäßig (alle kamen aus der gleichen Quelle
- Ich möchte über 99% der sichtbaren text
- über 99% von dem, was tragfähig ist, an alles ist text (Sie sind mehr oder weniger RTF in HTML konvertiert)
- Ich kümmern sich nicht über die Formatierung oder sogar Absatz bricht.
Gibt es irgendwelche tools einrichten, dies zu tun, oder bin ich besser dran, nur ausbrechen RegexBuddy und C#?
Ich bin offen für Befehlszeile oder batch-processing-Werkzeuge wie C/C#/D Bibliotheken.
Nichts, aber regexes.
Wenn es etwas gab, was aber so Einschränkungen, die ich zuvor noch nie glaubst regex 🙂
Wenn es etwas gab, was aber so Einschränkungen, die ich zuvor noch nie glaubst regex 🙂
InformationsquelleAutor BCS | 2010-01-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die HTML-Agility-Pack.
Möchten Sie wahrscheinlich finden Sie ein element mithilfe von LINQ-ant der
Descendants
Anruf, dann Holen Sie sich IhreInnerText
.Sie nicht müssen zu lernen, LINQ, aber LINQ macht es viel einfacher zu bedienen. Ich würde vermuten, dass die Verwendung von LINQ effektiv machen würde Ihrem code mindestens 120% kürzer und leichter zu verstehen auch.
Wow mein code ist -20 Zeilen code! 😉
+1 Das agility-pack ist so viel besser als das schreiben Ihrer eigenen DOM-Verarbeitung-Programm.
Wie es passiert, LINQ, war nicht die einfachste Lösung, aber nur, weil es ein Beispiel-Projekt html2text, haben 90% von dem, was ich wollte und das Letzte 1% war trivial hinzufügen als ein paar Zeilen
if(...) return;
(OTOH die Dokumentation war nicht so gut.)InformationsquelleAutor SLaks
Diesem code habe ich gehackt, bis heute mit HTML-Agility-Pack, extrahiert unformatierte getrimmten text.
Wenn Sie wollen, halten einige Ebene der Formatierung, auf die Sie bauen können die Probe mit der Quelle.
InformationsquelleAutor Sam Saffron
Es ist relativ einfach, wenn Sie laden den HTML-Code in C# und dann mit der mshtml.dll oder das WebBrowser-control in C#/WinForms, Sie können dann behandeln die gesamte HTML-Dokument als einen Baum, Durchlaufen den Baum erfassen Sie die InnerText-Objekte.
Oder Sie können auch dokumentieren.alle, die den Baum, verflacht es, und dann kann man die Iteration über den Baum, wieder der Erfassung der InnerText.
Hier ein Beispiel:
Hoffe, das hilft!
Ich habe gerade bearbeitet meine post mit einem Beispiel mit dem WebBrowser-Steuerelement.
gutes Beispiel,das funktioniert gut für mich..+1
Leider ist diese Methode nicht funktionieren auf Server Core-Systemen, da Sie nicht über WebBrowser-Komponente installiert.
InformationsquelleAutor AlishahNovin
Hier ist der code, den ich verwende:
<script>
und<style>
- tags. Darüber hinaus, obwohl (nach meinem beschränkten wissen) der standard erfordert, dass Sie die Spitzen Klammern im Attribut-Werten codiert werden, die moderne Browser sind tolerant gegenüber Dingen wie<div data:tree="parent>child">Some text</div>
, die auch brechen Ihre regex.Was ist der Zweck der mit der
IgnoreCase
option für die regex hier?InformationsquelleAutor Paul
Können Sie NUglify unterstützt extrahieren von text aus HTML:
Als es ist mit einem HTML5 benutzerdefinierte parser, es sollte Recht robust sein (speziell, wenn das Dokument enthält keine Fehler) und ist sehr schnell (keine regexp beteiligt, aber eine Reine recursive-descent-parser)
InformationsquelleAutor xoofx
Hier können Sie ein tool herunterladen und seine Quelle, wandelt hin und her, HTML-und XAML: XAML/HTML-Konverter.
Es enthält ein HTML-parser (so ein Ding muss natürlich viel toleranter als Ihre standard-XML-parser), und Sie können Durchlaufen, die HTML sehr ähnlich zu XML.
InformationsquelleAutor herzmeister
Aus der Befehlszeile, die Sie verwenden können, die Lynx text-browser wie diese:
Können Sie deaktivieren Sie die Liste der links mit
-nolist
. Zum Beispiel:InformationsquelleAutor Hugo
Ist hier der Beste Weg:
select link from google where query = "Html RegEx" limit 1
-> stackoverflow.com/questions/1732348InformationsquelleAutor Ashraf
Hier ist eine Klasse, die ich entwickelt habe, um das gleiche erreichen. Alle verfügbaren HTML-parsing-libraries waren viel zu langsam, regex viel zu langsam, wie gut. Funktionalität ist erklärt in den Kommentaren im code. Aus meiner benchmarks, dieser code ist ein wenig mehr als 10X schneller als die HTML-Agility-Pack entspricht der code, der beim Test auf die Amazon-Zielseite (im Lieferumfang enthalten unten).
Entspricht in HtmlAgilityPack:
InformationsquelleAutor