парсинг тегов, как userjs
хочу спарсить теги, например <title> , срабатывает у всех сайтов.
Но мне надо именно у вконтакте.ру.
var regex = /<title>(.+?)<\/title>/i;
var allhtml = document.getElementsByTagName("html");
var arr = regex.exec(allhtml[0].innerHTML);
alert(arr[1]);
в чем проблема? |
в велосипеде
для вывода или назначения надо использовать document.title alert( document.title ) |
дело в том, что я буду парсить ни только тайтл.
ну и все равно на вконтакте не сработал |
Не используйте регулярки для разбора (X)HTML!
Есть и другие чудесные способы. ДОМовские: getElementsByTagName, getElementsByClassName, getElementsByЧтоУгодно; CSS-селекторы: querySelector, querySelectorAll; XPath, мощнейший инструмент для траверса.Только умоляю, никогда не разбирайте HTML-представление содержимого DOM-элемента регулярками в поиске «нужного тега»! |
Хехе, я помнится по молодости поднимал вопрос парсинга ~1мег произвольно оформленного(в т.ч. и лицами далёкими от веба) при помощи html текста с приведением выходного результата к единому виду.(удаление недопустимых тегов и атрибутов и аккуратное форматирование)
Тогда я решил это регулярками, но честно говоря в код заглядывать боюсь ибо там ужасЪ. Интересно, можно ли было бы решить эту задачу иным способом и без медленных надмозгов?) |
subzey, какой именно сработает то?
пробовал несколько, ни один не сработал |
ну, getElementsByTagName, например
document.getElementsByTagName( 'title' )[0].innerText всмысле, document.title не сработал? |
Aetae,
смотря насколько по молодости. Сейчас можно даже на PHP :)
<?php
header("Content-Type: text/plain; charset=utf-8");
/* Тут наш грязненький код */
$str = <<<EOD
<p mso:crap="enabled" mso:foo="" mso:bar><img src="foo.gif" alt="" mso:shit="enabled">Всем при<strong></strong>вет!</p><br />
<p mso:crap="enabled" mso:foo="" mso:bar> Я — <u><i>очень</u></i> <strong>грязный</strong> кусок кода!
EOD
;
/* Ошибок будет много. Они нам особо не нужны */
libxml_use_internal_errors(true);
/* Создаем "грязный" документ */
$in_document = new DOMDocument();
/* Флаг: продолжаем парсинг в любом случае */
$in_document->recover = true;
/* Загружаем в "грязный" документ данные */
$in_document->loadHTML('<?xml encoding="utf-8" ?><body>' . $str . '</body>');
/* DOM - это только модель. Имплементаций ее достаточно много. Создаем одну такую. */
$dom = new DomImplementation();
/* К ней создаем доктайп. Старый добрый XHTML 1.0 Strict */
$doctype = $dom->createDocumentType("html", "-//W3C//DTD XHTML 1.0 Strict//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd");
/* Наконец, создаем "чистый" документ из имплементации с доктайпом */
$document = $dom->createDocument("http://www.w3.org/1999/xhtml", "html", $doctype);
/* Устанавливаем кодировку явным образом */
$document->encoding = "utf-8";
/* Импортируем из "грязного" документа body */
/* Вот тут, кстати, имеет значение тот самый ownerDocument из соседней темы */
$document->body = $document->documentElement->appendChild($document->importNode($in_document->getElementsByTagName("body")->item(0), true));
/* Создаем объект XPath для "чистого" документа */
$xpath = new DOMXpath($document);
/* Начинаем чистить: */
/* Убираем аттрибуты, начинающиеся с mso: */
foreach ($xpath->query('//attribute::*[starts-with(name(), "mso:")]') as $attr) $attr->parentNode->removeAttributeNode($attr);
/* Убираем все пустые элементы, которые не img, br или hr */
foreach ($xpath->query('//*[not(local-name() = "img" or local-name() = "br" or local-name() = "hr" or local-name() = "link")][not(./node())]') as $element) $element->parentNode->removeChild($element);
/* Убираем все br, которые лежат непосредственно в body */
foreach ($xpath->query('/*/body/br') as $element) $element->parentNode->removeChild($element);
/* . . . ну и так далее, до полного просветления */
/* Вывод с отступами */
$document->formatOutput = true;
/* Выводим */
echo $document->saveXML();
/***
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<p><img src="foo.gif" alt="" />Всем привет!</p>
<p> Я — <u><i>очень</i></u> <strong>грязный</strong> кусок кода!</p>
</body>
</html>
**/
?>
|
| Часовой пояс GMT +3, время: 23:11. |