|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.01.2014, 14:55 | #1 |
объявления
Пользователь
Регистрация: 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(); Что делать не знаю. Подскажите? |
08.01.2014, 15:22 | #2 |
объявления
Пользователь
Регистрация: 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. |
09.01.2014, 11:31 | #3 |
Форумчанин
Регистрация: 09.05.2009
Сообщений: 122
|
Парсить правильнее и удобнее через регулярные выражения и фнукции preg_replace\preg_match\...
|
09.01.2014, 11:41 | #4 |
Форумчанин
Регистрация: 09.05.2009
Сообщений: 122
|
http://www.bl2.ru/programing/regular.html
Вставьте код сайта и попробуйте свое регулярное выражение - у меня ничего не нашлось. А вот так нашлось: #<div class="item">(.*)</div>#si Но учтите - регулярные выражения не понимают где заканчивается тег: <div class="item">. Оно возьмет все что ниже тега <div class="item"> до последнего </div> |
09.01.2014, 14:55 | #5 |
объявления
Пользователь
Регистрация: 21.08.2012
Сообщений: 47
|
Мне сказали что если написать вопрос вот тут (.*?) то скушает только до ближайшего.
|
09.01.2014, 16:42 | #6 |
Форумчанин
Регистрация: 09.05.2009
Сообщений: 122
|
похоже на правду. попробуйте на ресурсе что я выше ссылку дал
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Парсер | 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 |