[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Парсинг HTML
RomanBV
Здравствуйте!
Подскажите пожалуйста как правильно парсить HTML страницы.
Я делал так: получал содержимое сайта при помощи функции file_get_content(), а потом строковыми функциями разбирал содержимое на части и получал нужную информацию.
Когда я попробовал парсить страницу содержащую RSS ленты, ничего не получилось.
Пробовал использовать реглярные выражения, но они работают очень медленно...



Спустя 54 минуты, 51 секунда (6.08.2010 - 19:19) dao-yan написал(а):
RSS передается в формате XML и парсить надо соответсвующи.

Читай здесь

Спустя 55 минут, 52 секунды (6.08.2010 - 20:15) RomanBV написал(а):
Спасибо.
dao-yan скажи пожалуйста почему когда я сохраняю HTML страницу у себя на компьютере, открываю её блокнотом и вижу обычные HTML теги. Никаких лент RSS я не нахожу, хотя значки на сайте есть. Я не могу увидеть структуру ленты.

Спустя 46 минут, 12 секунд (6.08.2010 - 21:01) dao-yan написал(а):
Современные браузеры умеют расшифровывать RSS ленты и поэтому ты сохраняешь уже готовую HTML страницу, для эксперимента ссылку на RSS засунь в Download Master или ещё в какую нибудь программу для закачек файлов.

Спустя 12 минут, 51 секунда (6.08.2010 - 21:14) RomanBV написал(а):
И это понятно biggrin.gif.
dao-yan а скажи пожалуйста почему не получается сохранить содержимое с помощью функции $content = file_get_content("www.rambler.ru"); а потом разобрать все по строкам. Строковые функции str_pos() не находят тегов. А если предварительно сохранить страницу на компе, то все получается? Говорят нужно использовать регулярные выражения, но в таком случае все работает очень медленно...
А как посмотреть структуру RSS, чтобы парсер написать?
(заранее благодарен).

Спустя 24 минуты, 45 секунд (6.08.2010 - 21:39) dao-yan написал(а):
Я для парсинга использую explode(), хорошо конечно регулярные выражения, но я их не знаю.
Пример здесь

А как посмотреть структуру RSS, чтобы парсер написать?

header("Content-type: application/text");
header("Content-Disposition: attachment; filename=rss.txt");
$content = file_get_contents("RSS АДРЕС");
echo $content;


p.s. Функции file_get_content не существует, только file_get_contents

Спустя 1 час, 31 минута, 48 секунд (6.08.2010 - 23:11) RomanBV написал(а):
Да, извини перепутал file_get_contents()! Я пробовал функция explode() не разделяет по тегам если на сайте есть ленты RSS... или я неправильно что-то делаю?

<?php
$content = file_get_contents("http://www.yadro.ws/index.php/vmchk/Notebooks/ACER/View-all-products.html");
$content = explode('<TD>', $content);

echo count($content)."<br>"; //показывает что в массиве 1 эл.
for ($i=0; $i < count($content); $i++)
echo htmlspecialchars($content[$i])."<br><br><br>"

?>

Спустя 54 минуты, 31 секунда (7.08.2010 - 00:05) dao-yan написал(а):
Скрипт работает правильно. Просто в этой HTML странице нет ни одного тега <TD>.
В ней есть только теги <td>, эта функция чувствительна к регистру.

Вот так будет работать лучше.

<?php
$content = file_get_contents("http://www.yadro.ws/index.php/vmchk/Notebooks/ACER/View-all-products.html");
$content = explode('<td>', strtolower($content));

echo count($content)."<br>"; //показывает что в массиве 1 эл.
for ($i=0; $i < count($content); $i++)
echo htmlspecialchars($content[$i])."<br><br><br>"

?>

Так как парсинг это не просто вывод текста на страницу, кешируй все данные.
Тем более что сайт www(точка)yadro(точка)ws работает жутко медленно.

Спустя 11 минут, 36 секунд (7.08.2010 - 00:17) RomanBV написал(а):
Спасибо большое! Это скрипт-тест, поэтому я и вывожу данные сразу на экран...
Попробую разобраться.

Спустя 9 дней, 10 часов, 54 минуты, 5 секунд (16.08.2010 - 11:11) Walz написал(а):
Если хотите распарсить RSS, лучше использовать стандартный XML парсер: xml_parser_create() и т.д.

Спустя 43 минуты, 22 секунды (16.08.2010 - 11:54) linker написал(а):
1. Гуглите на тему "спецификация rss".
2. RSS - Это банальный XML с определенным, так сказать, форматом.
3. "Разбирается" банальным SimpleXML или DOM.

Пример с DOM
$RSSData = file_get_contents('http://lenta.ru/rss/');
$XmlDoc = new DomDocument();
$XmlDoc->loadXML($RSSData);
// Дальше сам
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.