ExBB Community ExBB Community
 Сайт проекта ExBB Общение объединяет!
Войдите на форум при помощиВойти через loginza
 Чат на форуме      Помощь      Поиск      Пользователи     BanList BanList


 Страниц (1): [1]   

> Без описания
Defenderyk
Отправлено: 7 марта 2009 — 23:46
Post Id


Пользователь
Super Member


Покинул форум
Сообщений всего: 1027
Дата рег-ции: Февр. 2009  
Репутация: 31




Нашел сайт с которого очень многие парсят информацию, а точнее ТВ программу.

http://www.vida.ru/tvgrid/base.asp

Хотел бы тоже реализовать на сайте, но знаний с пхп не хватает, чтобы написать парсер. Может кто поможет, если это не слишком сложно Однако
 
 
Furax
Отправлено: 8 марта 2009 — 04:26
Post Id



Пользователь
Newbie


Покинул форум
Сообщений всего: 49
Дата рег-ции: Февр. 2009  
Репутация: 8




Вообще, на этом конкретно сайте свой код достаточно неплохой: картинки цепляются по абсолютным адресам. В этой ситуации самое простое, что можно сделать, - это посмотреть, между какими характерными наборами тегов встречается сама таблица с программой, и выхватывать её целиком, вставляя на свою страницу в виде того же исходного кода. А стили поменять всегда можно через CSS. Это если возиться особо неохота.

Если же нужно именно выдернуть саму программу, то это гораздо труднее. Начать, опять же, можно с выдирания таблицы целиком, а затем уже начать эту таблицу разбирать, выдирая то имя канала, то программы.

И, разумеется, не стоит забывать о кэшировании, а то могут просто забанить.
 
 
Defenderyk
Отправлено: 8 марта 2009 — 09:50
Post Id


Пользователь
Super Member


Покинул форум
Сообщений всего: 1027
Дата рег-ции: Февр. 2009  
Репутация: 31




Furax пишет:
И, разумеется, не стоит забывать о кэшировании, а то могут просто забанить.

вот вот. сделать бы, чтобы например кэшировать в файл или базу данных один раз в сутки в час ночи и было бы хорошо.
но как это делается я пока мало представляю.
 
 
Furax
Отправлено: 8 марта 2009 — 13:43
Post Id



Пользователь
Newbie


Покинул форум
Сообщений всего: 49
Дата рег-ции: Февр. 2009  
Репутация: 8




Defenderyk
Для начала давай определимся, что Ты хочешь получить: просто HTML-код таблицы с той страницы или же разобранные по каналам и времени телепередачи? И есть ли база данных?
 
 
Defenderyk
Отправлено: 8 марта 2009 — 15:32
Post Id


Пользователь
Super Member


Покинул форум
Сообщений всего: 1027
Дата рег-ции: Февр. 2009  
Репутация: 31




Да, БД есть, но если через БД сложнее, то можно делать запись в файл.

Furax пишет:
просто HTML-код таблицы с той страницы или же разобранные по каналам и времени телепередачи


Если на странице будут выводится все каналы, (или по крайней мере можно было бы задать какие выводить, а какие нет, т.к у нас в городе не все каналы, которые там показывают) то иожно и так. А если возможно, чтобы еще сделать выборку по каналам, нажав на ссылку, чтобы не загромождать одну страницу, то лучше наверно так.

Но чтобы инфо парсилось в БД или файл не чаще одного раза в сутки Однако
 
 
Furax
Отправлено: 10 марта 2009 — 03:43
Post Id



Пользователь
Newbie


Покинул форум
Сообщений всего: 49
Дата рег-ции: Февр. 2009  
Репутация: 8




С БД как раз проще. Я бы предложил завести пару таблиц: в одной хранить названия (можно отдельно те, что на Vida.ru и те, что надо выводить - не суть) и даты обновления программ интересующих нас каналов. Во второй - программы: канал (id из первой таблицы), дата, время, название программы.

Когда происходит обращение к странице, запрашиваем даты обновления тех каналов, которые хотим вывести. Если они совпадают с сегодняшней - просто запрашиваем из базы программу на нужный день и выводим. Если не совпадают - начинаем хитрить.

Во-первых, удаляем из базы вчерашние (и позавчерашние, и т. д.) программы; во-вторых, грузим ту же Vidу.Ru (возможно, не одну страницу) и начинаем парсить. С этим, вроде бы, тоже особых проблем нет.

В цикле парсим канал за каналом. Для этого находим, к примеру, очередную строку
CODE:
http://www.vida.ru/blob/Channel/logo/
Эта строка, вроде бы, встречается только в начале программы каждого из каналов. После этого выдёргиваем имя канала - между
CODE:
alt="
И
CODE:
"
Если это имя отсутствует в базе - этот канал нас не интересует, переходим к следующему. Затем парсим записи программы - они будут между
CODE:
<table
И
CODE:
</table
Время находится между
CODE:
<b>
И
CODE:
</b>
Название передачи - между
CODE:
style="color:black; text-decoration: underline">
И концом строки. С тем, чтобы добавить записи в базу, проблем быть не должно.

Разумеется, если на сайте сменится дизайн, парсер придётся переписать.

Сортировать записи при выводе надо не по времени, а по очерёдности добавления в базу (id), потому что телевизионщики имеют обыкновение относить то, что до шести утра, как правило, к вчерашнему дню.
 
 
Defenderyk
Отправлено: 10 марта 2009 — 06:19
Post Id


Пользователь
Super Member


Покинул форум
Сообщений всего: 1027
Дата рег-ции: Февр. 2009  
Репутация: 31




Вобщем саму логику я знал Растерялся почему-то с логикой проблем у меня нет, а вот с самим написанием есть Растерялся
 
 
Furax
Отправлено: 10 марта 2009 — 08:00
Post Id



Пользователь
Newbie


Покинул форум
Сообщений всего: 49
Дата рег-ции: Февр. 2009  
Репутация: 8




Код? Код парсера можно написать, например, так:
CODE:
for ($channel = strpos($text, 'http://www.vida.ru/blob/Channel/logo/'); $channel !== FALSE; $channel = strpos($text, 'http://www.vida.ru/blob/Channel/logo/', $channel+1))
{
$nameStart = strpos($text, 'alt="', $channel)+5;
$name = addSlashes(substr($text, $nameStart, strpos($text, '"', $nameStart)-$nameStart));

$result = mysql_query("SELECT `id` FROM `channels` WHERE `name`= '$name' LIMIT 1");
if (mysql_num_rows($result) == 0)
continue;
else
$id = mysql_result($result, 0);

$programBegin = strpos($text, '<table', $channe+1);
$programEnd = strpos($text, '</table', $programBegin);

for ($timeBegin = strpos($text, '<b>', $programBegin); $timeBegin && $timeBegin < $programEnd; $timeBegin = strpos($text, '<b>', $timeBegin+1))
{
$timeEnd = strpos($text, '</b>', $timeBegin);
$time = addSlashes(substr($text, $timeBegin+3, $timeEnd-$timeBegin-3));

$entryBegin = strpos($text, 'underline">', $timeEnd)+11;
$entry = addSlashes(substr($text, $entryBegin, strpos($text, '\n', $entryBegin)-$entryBegin));

mysql_query("INSERT INTO `programs` (`id`, `channel`, `date`, `time`, `name`) VALUES (NULL, $id, $date, '$time', '$entry')");
}
}
Предполагается, что $date и $text уже заданы и в них уже лежат, соответственно, дата, программа за которую парсится (в том виде, в котором она должна быть отправлена в базу данных), и непосредственно возвращённый Vidой HTML-код.

Код не отлаживал, возможны ошибки, но суть, я думаю, понятна.
 
 
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« PHP/Perl »

> Похожие темы: Парсер программы ТВ. как сделать?
Темы Форум Информация о теме Обновление
Изменение заголовка и удаление своей темы самим пользователем
Как сделать?
Настройка форума Ответов: 3
Автор темы: team
9 ноября 2009 — 13:03
Автор: team
Выбор одного стиля для всех пользователей
Как сделать?
Обсуждение Ответов: 19
Автор темы: Parapsixolog
4 мая 2018 — 11:34
Автор: Parapsixolog
Изменение ссылок в ветках форума после переноса на другой хостинг.
Как сделать?
Решение проблем Ответов: 18
Автор темы: drug
11 апреля 2012 — 08:47
Автор: 1Bot
Список форумчан только форумчанам
Как сделать так, чтобы список пользователей не был доступен гостям
Обсуждаем Ответов: 15
Автор темы: ARW
14 февраля 2013 — 08:49
Автор: pigus
Статусы пользователей
Как сделать свой?
Общие вопросы Ответов: 19
Автор темы: SScrew
27 июля 2016 — 10:21
Автор: electron
 



Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
 




Яндекс.Метрика   

Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0615]     [ ]