игнорировать искаженный XML с помощью Perl-XML - PullRequest
0 голосов
/ 25 января 2011

Я использую утилиту командной строки perl xpath для извлечения данных из некоторого HTML-кода следующим образом:

#!/bin/bash
echo $HTML | xpath -q -e "//h2[1]"

HTML имеет неправильный формат, в результате чего xpath выдает следующую ошибку:

not well-formed (invalid token) at line X, column Y, byte Z:

Я не могу по-настоящему исправить HTML, поскольку он предоставляется внешним источником, а это означает, что каждый раз, когда HTML-код изменяется, мне придется снова исправлять его вручную.

Я искал xpath man, который довольно хорошempty: http://www.linuxcertif.com/man/1/xpath.1p/

Мне было интересно, найдется ли способ заставить xpath игнорировать искаженный HTML.Чтобы дать вам представление о том, как это неправильно, вот несколько строк из исходного кода:

<div id="header-background" style="top: 42px; >&nbsp;</div> <---- missing closing "
<div id-"page-inner">   <---- - instead of =

Спасибо

Ответы [ 2 ]

5 голосов
/ 25 января 2011

Попробуйте HTML :: TreeBuilder :: XPath , который использует анализатор HTML для создания документа, который затем может быть запрошен с использованием xpaths. Анализатор HTML должен быть в порядке с искаженным XML.

Также см. Эту статью о Соскребании HTML с XPath .

4 голосов
/ 25 января 2011

xml_grep, инструмент командной строки, который поставляется с XML :: Twig, может быть использован для извлечения данных из HTML с использованием XPath. Обычно он работает на XML, но вы можете использовать опцию -html для обработки HTML (под капотом он использует HTML :: TreeBuilder для конвертации XML в HTML).

Например:

> xml_grep -html -t 'a[@class="genu"]' http://stackoverflow.com
> Stack Exchange
...