Ich bin an einem Parser interessiert, der eine fehlerhafte HTML-Seite erstellen und in gut formatierten HTML-Code umwandeln kann, bevor einige XPath-Abfragen ausgeführt werden. Kennst du irgendwelche?Wie behandeln Sie fehlerhafte HTML in Perl?
Antwort
Sie sollten keinen XML-Parser verwenden, um HTML zu analysieren. Verwenden Sie einen HTML-Parser.
Beachten Sie, dass die folgende ist absolut gültige HTML (und ein XML-Parser daran ersticken würde):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Is this valid?</title>
</head>
<body>
<p>This is a paragraph
<table>
<tr> <td>cell 1 <td>cell 2
<tr> <td>cell 3 <td>cell 4
</table>
</body>
</html>
Es gibt viele spezifische Aufgabe (zusätzlich zu dem allgemeinen Zweck) HTML-Parser auf CPAN. Sie haben perfekt für mich auf eine immense Vielfalt von extrem chaotisch (und meistens ungültig) HTML gearbeitet.
Es wäre möglich, spezifische Empfehlungen zu geben, wenn Sie das Problem angeben können, das Sie lösen möchten.
Es gibt auch HTML::TreeBuilder::XPath, die HTML::Parser verwendet, um das Dokument in einem Baum zu analysieren und dann ermöglicht es, es mithilfe von XPath abzufragen. Ich habe es nie benutzt, aber siehe Randal Schwartz HTML Scraping with XPath.
die HTML-Datei oben gegeben, die folgende kurze Skript:
#!/usr/bin/perl
use strict; use warnings;
use HTML::TreeBuilder::XPath;
my $tree= HTML::TreeBuilder::XPath->new;
$tree->parse_file("valid.html");
my @td = $tree->findnodes_as_strings('//td');
print $_, "\n" for @td;
Ausgänge:
C:\Temp> z cell 1 cell 2 cell 3 cell 4
Der entscheidende Punkt ist hier, dass das Dokument von einem HTML-Parser als HTML-Dokument analysiert wurde (trotz der Tatsache, dass wir es mit XPath abfragen konnten).
Wenn Sie nicht nach learn more about wheels suchen, verwenden Sie den Code HTML Tidy.
Mit der Fülle von Task-spezifischen Parser für einen Perl-Programmierer, das ist selten erforderlich. –
Es ist 5 Jahre her, seit ich das letzte Mal mit Perl gearbeitet habe ... denke mal. – AnonJr
Man könnte die Frage wie diese anders formulieren:
Ich habe Interesse an einem Parser, der eine ungültige
HTML-SeiteC-Quelle übernehmen könnte, und schalen Sie sich in gutHTMLC-Quelle gebildet vor der Durchführung einigeXPath AbfragenKompilierung und Verknüpfung darauf. Kennst du irgendwelche?
Jetzt kann die Frage etwas offensichtlicher sein: Es wird nicht einfach sein. Wenn es sich wirklich um falsch formatiertes HTML handelt, müssen Sie die Arbeit möglicherweise manuell durchführen, bis sie in einen HTML-Parser eingegeben werden kann. Dann können Sie eines der anderen hier vorgestellten Module verwenden, um die Arbeit zu erledigen. Es ist jedoch unwahrscheinlich, dass Sie jemals rohen HTML-Code programmatisch in strikt gültige xhtml übersetzen können.
- 1. Wie fehlerhafte HTML in Python zu analysieren
- 2. Entity-Framework-Problem: Wie fehlerhafte Spalte zu behandeln
- 3. So erkennen Sie fehlerhafte UTF-Zeichen
- 4. Wie kann ich Javascript in einem Perl Web Crawler behandeln?
- 5. BeautifulSoup (bs4): Wie zu ignorieren End-Tag in fehlerhafte HTML
- 6. HTML-Parsing in Perl
- 7. Behandeln Sie fusionierte Zellen in Epplus Excel-Konvertierung in HTML
- 8. Wie behandeln/parse schlecht formatierte HTML in DOM in Java?
- 9. Html, Hyperlink, Perl, reload
- 10. Wie mache ich Apache behandeln .pl (Perl) -Dateien, mit mod_perl?
- 11. fehlerhafte net-snmp Fehlerbehandlung
- 12. Wie loggen/debuggen Sie fehlerhafte Anfragen in Tomcat?
- 13. Wie behandeln Sie "unmögliche" Ausnahmen in Java?
- 14. Wie behandeln Sie Socket Disconnecting in Java?
- 15. Wie behandeln Sie Fremdschlüsselbeziehungen in Modellklassen
- 16. Wie kann ich Inline-Perl-Code in HTML, wie PHP?
- 17. Verwenden Sie Hashes in Perl HTML :: Template :: Kompiliert
- 18. Wie HTML-Tabellen automatisch mit Perl bearbeiten?
- 19. Was ist der beste Weg, Ausnahmen in Perl zu behandeln?
- 20. So überprüfen Sie fehlerhafte Links mit Cucumber.js
- 21. Wie 400 fehlerhafte Fehler in WCF beheben
- 22. Wie 400 fehlerhafte Fehler beheben?
- 23. Fehlerhafte RTCConfiguration nur in Chrome
- 24. Wie kann ich Web-Sitzungen mit CGI :: Session in Perl behandeln?
- 25. Wie konvertiert man HTML in RTF in Perl?
- 26. Holen Sie sich Android, um HTML zu behandeln Wählen Sie wie Android Spinner?
- 27. Wie streichen HTML-Tags mit IDs in Perl?
- 28. Wie kann ich Daten aus HTML-Tabellen in Perl extrahieren?
- 29. Kann Webbrowser-Steuerelement "schlechtes" HTML behandeln?
- 30. Perl: Konvertieren HTML-Tabelle in Bild
Hängt davon ab, was Sie versuchen zu tun. Ich parsen routinemäßig mehrere zehn Gigabyte an entstellter HTML-Quelle, ohne sich darum zu kümmern. –
Wie geht es dir? Ich habe versucht, XML :: XPath in Kombination mit LWP :: UserAgent zu verwenden, und XML :: XPath ist mit einem fehlerhaften Fehler fehlgeschlagen. Vielleicht möchten Sie Ihre Strategie als Antwort veröffentlichen. – Geo
Die Antwort hängt von der spezifischen Aufgabe ab. Ihre Frage ist zu vage, um eine konkrete Antwort zu geben. Versuchen Sie jedoch zunächst nicht, HTML als XML zu analysieren. Verwenden Sie einen HTML-Parser. –