Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2014, 14:55   #1
Mick_20
объявления
Пользователь
 
Регистрация: 21.08.2012
Сообщений: 47
Вопрос простой парсер

Хочу научиться писать простые парсеры.
Нашел в сети код простого парсера, который берет контент с сайта начиная с заголовка <h2> и заканчивая на <hr>

Вот он:

/* получаем содержимое нужной нам страницы в переменную $content (обратите внимание, – мы используем для этого функцию file_get_contents. Она может работать с удаленными URL только если в настройках PHP установлена опция allow_url_fopen) */
$content = file_get_contents('http://news.yandex.ru/');
// Определяем позицию строки, до которой нужно все отрезать (используем функцию strpos()).
$pos = strpos($content, '<h2>Главные новости</h2>');
/*Отрезаем все, что идет до нужной нам позиции (функция substr в данном случае принимает два параметра: строка для обработки и //номер позиции. Функция вернет строку, НАЧИНАЯ с указанной позиции) */
$content = substr($content, $pos);
// Точно таким же образом находим позицию второй строки
$pos = strpos($content, '<hr>');
// Отрезаем нужное количество символов от нулевого
$content = substr($content, 0, $pos);
// выводим полученную строку.
echo $content;


Создал я файл с этим кодом в корневой папке своего сайта. Зашел через браузер и ничего нет кроме белого экрана(

allow_url_fopen на сервере включен. посмотрел чз phpinfo();

Что делать не знаю. Подскажите?
Mick_20 вне форума Ответить с цитированием
Старый 08.01.2014, 15:22   #2
Mick_20
объявления
Пользователь
 
Регистрация: 21.08.2012
Сообщений: 47
По умолчанию

Короче понял я в чем была ошибка. В новостях Яндекса нет уже заголовка <h2> он тепер <span>....

В общем все хорошо. Остался другой вопрос.

Вот сайт имеется: http://gazeta.a42.ru/lenta/tags/tayga

В нем лента новостей.
Вот так там новости идут:

<div class="item">новость1</div>
<div class="item">новость2</div>
<div class="item">новость3</div>

Как условие задать, чтобы парсились все три новости а не только первая.

Набросал код, но он чтот не работает. Гляньте оцените масштаб безответственности ))


$contentnews = file_get_contents('http://gazeta.a42.ru/lenta/tags/tayga');

preg_match_all('#<div class="item">(.*)</div>#',$contentnews,$arraynews);

for ($i=0; $i< count($arraynews[0]); $i++) {
echo "arraynews: " . $arraynews[0][$i] . "\n";
}

Последний раз редактировалось Mick_20; 08.01.2014 в 15:28.
Mick_20 вне форума Ответить с цитированием
Старый 09.01.2014, 11:31   #3
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

Парсить правильнее и удобнее через регулярные выражения и фнукции preg_replace\preg_match\...
Armatus вне форума Ответить с цитированием
Старый 09.01.2014, 11:41   #4
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

http://www.bl2.ru/programing/regular.html

Вставьте код сайта и попробуйте свое регулярное выражение - у меня ничего не нашлось.

А вот так нашлось:

#<div class="item">(.*)</div>#si

Но учтите - регулярные выражения не понимают где заканчивается тег: <div class="item">. Оно возьмет все что ниже тега <div class="item"> до последнего </div>
Armatus вне форума Ответить с цитированием
Старый 09.01.2014, 14:55   #5
Mick_20
объявления
Пользователь
 
Регистрация: 21.08.2012
Сообщений: 47
По умолчанию

Мне сказали что если написать вопрос вот тут (.*?) то скушает только до ближайшего.
Mick_20 вне форума Ответить с цитированием
Старый 09.01.2014, 16:42   #6
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

похоже на правду. попробуйте на ресурсе что я выше ссылку дал
Armatus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсер hitrov PHP 0 04.12.2012 20:30
[C#] Простой парсер JonMagon Помощь студентам 11 25.12.2011 15:45
парсер shanluu PHP 3 31.05.2011 17:59
парсер на C# newerwiner C# (си шарп) 1 08.05.2011 16:16
Парсер Ronin333 Общие вопросы C/C++ 3 15.04.2010 14:00