Jestem zainteresowany analizatorem składni, który może wykonać zniekształconą stronę HTML i przekształcić ją w dobrze sformatowany kod HTML przed wykonaniem niektórych zapytań XPath. Czy znasz jakieś?Jak radzisz sobie ze źle sformułowanym kodem HTML w Perlu?
Odpowiedz
Nie należy używać analizatora XML do parsowania kodu HTML. Użyj parsera HTML.
Należy pamiętać, że poniższe nie jest całkowicie poprawny HTML (i parser będzie dusić na nim):
<!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>
Istnieje wiele specyficznych zadań (oprócz ogólnego przeznaczenia) parser HTML na CPAN. Działają doskonale dla mnie w ogromnej różnorodności niezwykle nieuporządkowanych (i przez większość czasu nieważnych) HTML.
Można podać konkretne zalecenia, jeśli można określić problem, który próbujesz rozwiązać.
Istnieje również , który używa HTML::Parser do parsowania dokumentu do drzewa, a następnie pozwala na zapytanie go za pomocą XPath. Nigdy go nie używałem, ale zobacz Randal Schwartz's HTML Scraping with XPath.
Biorąc pod uwagę powyższy plik HTML, co następuje krótki scenariusz:
#!/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;
wyjścia:
C:\Temp> z cell 1 cell 2 cell 3 cell 4
Kluczową kwestią jest to, że dokument został przeanalizowany przez parser HTML jako dokument HTML (pomimo tego, że byliśmy w stanie wysłać zapytanie za pomocą XPath).
Jeśli nie szukasz learn more about wheels, użyj kodu HTML Tidy.
Z ogromną ilością parsera zadania dostępnego dla programisty Perla, rzadko jest to konieczne. –
Minęło 5 lat, odkąd ostatni raz pracowałem z Perlem ... zgadnij, co to jest. – AnonJr
Można przeformułować pytanie tak:
Jestem zainteresowany parsera, który mógłby podjąć nieprawidłowy
HTML stronyC źródła i przekształcić go w dobrze uformowaneHTMLC Źródło przed wykonaniem częśćXPath pyta o kompilacjękompilacji i linkowania. Czy znasz jakieś?
Teraz pytanie może być nieco bardziej oczywiste: to nie będzie łatwe. Jeśli jest to naprawdę zniekształcony kod HTML, może być konieczne ręczne wykonanie pracy, dopóki nie zostanie ona przekazana do analizatora składni HTML. Następnie możesz użyć dowolnego z przedstawionych tutaj modułów do wykonania pracy. Jest jednak mało prawdopodobne, że kiedykolwiek można programowo przetłumaczyć surowy HTML na ściśle prawidłowy xhtml.
- 1. Jak radzisz sobie z kodem błędu LicenseCheckerCallback.ERROR_NOT_MARKET_MANAGED?
- 2. Jak radzisz sobie ze starymi przeglądarkami w swojej witrynie?
- 3. Jak radzisz sobie z pluralizacją w Ember?
- 4. Jak radzisz sobie z wieloma zaznaczeniami w kontrolce rozwijanej?
- 5. Jak radzisz sobie z danymi R w pakiecie?
- 6. Jak radzisz sobie z powiązanymi błędami w Bugzilli?
- 7. Jak radzisz sobie z własnością pliku w git?
- 8. Hackowanie i wykorzystywanie - jak radzisz sobie z lukami w zabezpieczeniach?
- 9. Jak radzisz sobie z wyjątkami "niemożliwymi" w Javie?
- 10. Jak radzisz sobie z żądaniami Ajax w Spring MVC?
- 11. Jak radzisz sobie z brakiem równowagi danych w SVM?
- 12. W asemblerze, w jaki sposób radzisz sobie z C struct?
- 13. Jak radzisz sobie z wątkiem, który ma zawieszone połączenie?
- 14. Jak radzisz sobie z duplikatami Amazon Kinesis Record?
- 15. Jak radzisz sobie z wdrażaniem aplikacji szyny z submodułami?
- 16. Parsowanie HTML w perlu
- 17. Czytanie ze zmiennej w Perlu
- 18. Jak radzić sobie z błędami w łańcuchach metod w Perlu?
- 19. Jak przekonwertować HTML na RTF w Perlu?
- 20. Jak radzić sobie z doskonałymi produktami napisanymi z błędnym kodem?
- 21. Symbol nieskończoności z kodem HTML
- 22. Wywoływanie tabeli HTML z kodem
- 23. Jak dobrze wtyczka migracyjna jQuery radzi sobie z przestarzałym kodem?
- 24. Jak radzić sobie ze zmianą orientacji w Sencha Touch V2
- 25. FragmentPagerAdapter - jak radzić sobie ze zmianami orientacji?
- 26. Jak radzisz sobie z wieloma otwartymi plikami o tej samej nazwie w VisualStudio?
- 27. Jak radzisz sobie z nazwami TLD dla kodów Country w twoich pakietach/przestrzeniach nazw?
- 28. Jak radzisz sobie z problemem "Zbyt wiele plików" podczas pracy w Bash?
- 29. Jak wykrywać rosyjskie posty ze spamem w Perlu?
- 30. Pobieranie html ze schowka w javascript
Zależy od tego, co próbujesz zrobić. Rutynowo analizuję dziesiątki gigabajtów zniekształconego źródła HTML, nie martwiąc się o nic z tego. –
Jak się masz? Próbowałem użyć XML :: XPath w połączeniu z LWP :: UserAgent, a XML :: XPath nie powiodło się ze zepsutym błędem. Może chcesz opublikować swoją strategię jako odpowiedź. – Geo
Odpowiedź zależy od konkretnego zadania. Twoje pytanie jest zbyt ogólnikowe, by dać konkretną odpowiedź. Najpierw jednak nie próbuj parsować HTML jako XML. Użyj parsera HTML. –