Frage

Wie repariere ich fehlerhaftes HTML mit C #? Eine gute Antwort wäre ein HTML Agility Pack Beispiel!


Ich kratze eine Seite (für legitimen Gebrauch). Der HTML-Code der Website ist in Ordnung, aber es gibt einige lästige Probleme.

Eine Möglichkeit, die ich gehen könnte, wäre durch regelmäßige Ausdrücke. Ich habe Expression Web verwendet, um die Probleme und die regulären Ausdrücke zu analysieren, die zur Korrektur benötigt werden. Ein Weg wäre also, ein Werkzeug wie RegexBuddy zu verwenden, um C # -Code für diese regulären Ausdrücke zu erzeugen.

Das empfohlene Tool zum Verarbeiten von fehlerhaft formatiertem HTML in C # ist jedoch das HTML Agility Pack (HAP). Außerdem habe ich nur eine Handvoll Seiten analysiert, und ich fürchte, dass zukünftige Seiten Muster enthalten, die ich noch nicht gelöst habe, und ich würde es hassen, die "Suche nach den Fehlern auf den nächsten Seiten und die Korrektur" in die Wartung einzutragen Geschäft. Also, wenn HAP bereits eine solide, immer funktionierende Lösung hat, wäre das großartig. Das Problem ist, dass ich bis auf ein paar Erwähnungen hier bei SO keine Dokumentation für dieses Tool finden konnte, außer für die Objekt-für-Objekt-API-Hilfedatei.

Also - bevor ich $ und Lernzeit auf RegexBuddy (keine kostenlose Testversion) ausspare, oder mir die API-Dokumentation von HAP nicht antun kann - gibt es einen einfachen Weg, dies zu tun? Ein HAP-Sample würde helfen ... :-)

Akzeptierte Antwort

Was ich den Antworten hier entnommen habe: 1) Wenn Sie eine Website scrapen, die Sie nicht kontrollieren, gelangen Sie immer in einen Wartungsmodus, in dem Sie Ihren Scraper jedes Mal korrigieren müssen, wenn sich das Layout der Seite, die Sie scrapen, ändert . 2) Wenn Sie auf diese bekannte Site beschränkt sind, warum schreiben Sie nicht Ihren Scraper, um die Probleme zu korrigieren

Also, wenn ich in den Wartungsmodus gehen muss, sollte es so einfach wie möglich sein. Daher ist mein Prozess wie folgt:

  1. Ich verwende Webius SWExplorerAutomation , um Szenen auf Webseiten zu erkennen. Die Idee ist, dass eine Szene eine Sammlung von Bedingungen ist, die Sie für IE definieren. Wenn eine Webseite geladen wird, versucht IE zu sehen, welche Bedingungen erfüllt sind (zB - Seitentitel ist "Account Login", die Seite enthält ein "Login" Textfeld und ein "Passwort" Textfeld). Wenn eine Reihe von Bedingungen erkannt wird, die einer Szene entsprechen, meldet der IE, dass die Szene erkannt wurde. Dieses Modell stellt eine Abstraktionsschicht bereit - Einige Änderungen auf der Webseite können zu Änderungen in der Szenendatei führen und verhindern, dass der Code geändert werden muss. Zusätzlich schütze ich mich vor dem ereignisgesteuerten Modell von IE: Ich nenne "Szene. Ich bewerte dieses Produkt, aber ich bin mir noch nicht sicher, ob ich es verwenden werde, hauptsächlich weil die Dokumentation schrecklich ist. Eine andere Alternative ist Wattin und noch eine Grund, warum ich SWEA noch nicht gekauft habe, ist dieser Artikel , der seinen Autor des Spammings gegen Watin beschuldigt.
  2. Sobald die Webseite erfasst wurde, verwende ich Expression Web, um Kompatibilitätsprüfungen durchzuführen und Fehler zu identifizieren.
  3. Ich benutze RegexMagic , um Fehler zu entfernen und zu korrigieren. Ich liebe dieses Werkzeug wirklich. Sicher, manchmal macht es dich mörderisch wütend, weil es dich nicht Dinge tun lässt, die wirklich einfach sein sollten, aber es ist ein süßes, süßes Werkzeug, und die Dokumentation ist erstaunlich.
  4. Schließlich, nachdem alle Fehler, die ich kenne, korrigiert wurden, benutze ich HTML Agility Pack, um XHTML zu konvertieren - kreuze die ts und dot the is, sozusagen: alles Kleinbuchstaben, Anführungszeichen über Attribute und so weiter.

Hoffe das hilft!

Avi


Beliebte Antwort

kannst du mir sagen, was für nervige Probleme du hast?
aber Sie müssen nicht Regex verwenden, um den HTML-Code zu bereinigen, HAP wird Ihnen den Zugriff auf die Elemente eines fehlerhaften HTML mit Xpath-Abfragen ermöglichen.
und im Grunde müssen Sie Xpath lernen, um zu wissen, wie Sie die gewünschten HTML-Elemente erhalten.
Es hängt wirklich von der Art von HTML ab, die Sie mit HAP analysieren.
aber es gibt mehrere Möglichkeiten, um die Elemente zu bekommen.
Wie bei ID oder Klasse oder sogar Sie können das Element erhalten, das einem anderen Element folgt, das einen gegebenen Text wie "Name:" zum Beispiel enthält.
Sie können zu W3 Schulen Xpath Tutorial für ein nettes Xpath Tutorial gehen



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum