Содержание
Очень часто у владельцев сайтов возникает необходимость публикации каких-то динамических данных с других сайтов. Например, кому-то нравится публиковать информацию о погоде в своем городе, кто-то публикует программу телепередач для любимого канала, различные анонсы и т.п. Упростить задачу можно с помощью парсера. В нашем случае напишем его на php и условимся, что ваш хостинг его поддерживает. Никаких особых навыков программирования не требуется.
Парсер контента: введение
Допустим, интересующая нас информация есть на каком-нибудь стороннем сайте и там же обновляется. Разумеется, можно периодически посещать сайт с информацией, копировать ее оттуда и обновлять у себя на сайте пресловутыми: Ctrl+C и Ctrl+V. Но можно и не заходить, а поручить задачу несложному скрипту - парсеру, который по требованию: зайдет на сайт-донор, найдет и вырежет нужную нам информацию и отобразит ее на нашем сайте. Проще говоря, информация с другого сайта будет публиковаться на вашем в полностью автоматическом режиме. Если перспектива для вас радужная - читаем далее.
Я упускаю размышления об этической стороне этого дела, коснемся лишь технической стороны. Также не призываю никого использовать данный метод во вред кому бы то ни было! Разобравшись с техническими нюансами, вы сможете впоследствии приготовить специфические информеры для своего сайта, предоставлять своим пользователям актуальную и востребованную ими информацию. Здесь все зависит от полета вашей мысли!
Итак, пишем свой скрипт, который заходит на какой-нибудь сайт, выдергивает кусок нужной нам информации и публикует его на нашем сайте. Никаких программистских навыков от вас не требуется, делаем все попунктно и пробуем реализацию на своем блоге.
Реализация парсера на PHP
Пожалуй, самый ответственный момент в нашем случае - это поиск донора, то есть сайта, на котором будет появляться интересующая нас информация. Сайт должен работать бесперебойно, выполнять свои обязанности по обновлению информации исправно и текст должен быть открытый (то есть, открыв исходный код страницы в браузере - мы должны видеть там интересующую нас информацию).
Когда сайт-донор и нужная нам страница для парсинга найдена, запоминаем ее урл и переходим к следующему этапу. Создаем в блокноте текстовый файл, например parser.php и помещаем в него следующий код:
<?php //откуда будем парсить информацию $content = file_get_contents('полный урл страницы с http:// с которого будем вырезать информацию'); // Определяем позицию строки, до которой нужно все отрезать $pos = strpos($content, 'здесь кусок кода/текста который размещен перед нужным текстом'); //Отрезаем все, что идет до нужной нам позиции $content = substr($content, $pos); // Точно таким же образом находим позицию конечной строки $pos = strpos($content, 'здесь кусок кода/текста который стоит в конце нужного нам текста'); // Отрезаем нужное количество символов от нулевого $content = substr($content, 0, $pos); //если в тексте встречается текст, который нам не нужен, вырезаем его $content = str_replace('текст который нужно вырезать','', $content); // выводим спарсенный текст. echo $content; echo "вставляем сюда завершающий код"; ?>
Итак, какие-то 8 строчек кода и сторонний контент автоматически публикуется на нашем блоге. Зеленым цветом в коде обозначены места, которые вы обязательно должны отредактировать.
Нужны пояснения к кускам кода/текста? Тут все просто, мы должны указать начальную и конечную позицию в тексте, который нужно парсить. Открываем исходную страницу на сайте-доноре и ищем нужный нам текст. Как правило, он будет начинаться с какой нибудь html-разметки, что-то типа этого - <td><p><strong><em> и заканчиваться такой же абракадаброй - например, </td><td> </td><td> </td></tr>. Копируем эти символы в начальную и конечную позиции (2 и 3 строчки кода). Помним, наш скрипт спарсит текст, который находится между этими позициями на сайте.
parser.php готов. Копируем его в корень своего сайта и запускаем в браузере http://мой сайт/parser.php. Если вы все сделали правильно, вы увидите вырезанный/спарсенный кусок текста. Разумеется, он индексируется и не содержит никаких следов того, что вы его забрали с другого сайта.
Интеграция парсера на PHP в WordPress
Итак, парсер готов. Его работа протестирована, результатом довольны. Но как показать спарсенный контент на странице или в записи wordpress?
Если мы вставим вышеприведенный код в запись вордпресс пусть даже в режиме html, то в целях безопасности скрипты вордпресса его попросту вырежут - цензура не пропустит.
Решение находим, установив плагин, разрешающий вордпресс публиковать код php прямо в записи. Ищем какой нибудь плагин типа "Allow PHP in Posts and Pages" и смело заходим в редактор страницы/записи в вордпресс и в нужное место на странице вставляем вызов нашей страницы.
[ php] $content = file_get_contents('http://мой сайт/parser.php'); echo $content; [ /php]
Как видите, все просто. Проверяем работу скрипта, опубликовав запись. Если наблюдаются иероглифы в спарсенном контенте, последнюю строчку в этом коде перезаписываем на что-то типа этого:
echo iconv("windows-1251", "UTF-8", $content);
Со значениями windows-1251 и UTF-8 играем, переставляя (зависит от начальных кодировок сайта донора и пациента).
Предупреждаю, что это самая простая реализация парсера на php, но в некоторых случаях большего и не требуется.
С вами был Вячеслав, на возникшие вопросы отвечу в комментариях.
Вячеслав, добрый вечер необходимо спарсить текст, со страницы gosbank.su /category/vyplata/, которая находится на wordpress. Я как только не пробовал, просто пустая страница, хотя с остальными сайтами в порядке эксперимента всё получилось, подскажите как быть
Вячеслав, доброго времени суток.
Подскажите, как получить данные с сайта с авторизацией? Например, сайт ezwow org, к сожалению, данные (из раздела оружейная-гильдии) можно получить только после авторизации на сайте. Как реализовать доступ на базе данного парсера? Спасибо за ответ и рекомендации.
Чтобы получить авторизацию на PHP используйте библиотеку Snoopy https://github.com/endroy/Snoopy
Добрый день. Код отлично работает и парсит в моём случае анонсы. Но есть одно но. Анонсы на сайте доноре появляются не всегда, соответственно немного меняются теги, в этом случае парсер не находит начальный и конечный текст и выводит страницу сайта донора целиком. Возможно ли как-то решить эту проблему ? Спасибо.
В таком случае, проверяйте наличие начального тега. Если он есть, делайте:
В противном случае, ничего не делайте.
Прошу прощения, только начал разбираться с PHP. Понимаю, что нужно определить условие для вывода echo, а как это реализовать, честно не знаю, по этому прошу помощи. Спасибо.
Вместо последней строчки:
такой код:
P.S. Скрипт находит в спарсенном контенте кусок кода - "начальный тег", который можно заменить на любой кусок который явно есть в анонсе. Если такой кусок встретится в спарсенном контенте, на экран будет выведено echo!
Огромное спасибо. Хорошее дополнение к вашему парсеру, которое делает его довольно гибким.
Привет! Подскажите пожалуйсьта! Если конечно, это возможно! А как можно спарсить ссылку strima, которая находится в скрипте? т. е. плейер находится во фрейме, он берёт поток с другого файла, и показывает видео. Сама ссылка потока типа: .m3u8 находится между тегов ниже. я пробовал, но парсер его не видит.
Прошу прощение если не в тему, но парсить контент и делать самообновляющуюся страницу это чуть чуть разные вещи. Я хотел у вас просить совета/помощи по возможности реализации страниц с плей листом эфира интернет радиостанции, ведь они (плей листы) находятся в свободном доступе в соответствующем формате (не буду умничать не знаю точно.) Прошу рассказать, если это возможно на страницах вашего замечательного сайта как сделать постоянно обновляющуюся страницу с плей листом. Пример: online-red.com/radio/playlist/RUS-radio.html не реклама ни в коем случае.
А что делать, когда в исходном коде много одинаковых тегов? Например, хочу парсить курсы с банка, но там все курсы обернуты в одинаковые теги.
Если брать более отдаленные уникальные теги, то потом между тегами столько мусора, что не вырезать.
И что с кириллицей? если в тегах попадаются кириллические буквы, то они тоже лезут в спарсенную инфу.
Рекомендую в таком случае смотреть в сторону Xpath.
Всё намного проще. Купил плагин Skraper от codecanyon, лютая вещь, указываем что парсить, и он сам парсит ))
привет и как тебе плагин?)) как полное название?
Привет. Что, если мы спарсили ссылки вида
, а нужно оставить только Крылья Советов, без ссылки? Вариант с удалением каждой не подходит — их много и они могут меняться.
Попробуйте функцию strip_tags (она удаляет из строки теги HTML и PHP. Синтаксис простой:
echo strip_tags($text);
Вячеслав, во-первых, благодарю за статью!
Хотелось бы уточнить такой момент. С одной и той-же страницы сайта донора мне необходимо спарсить 2 значения, находящиеся в разных строках. Для этого я несколько модифицировал Ваш код:
ввел $content1 и $content2. И в этом же файле сделал вывод переменных на сайт с помощью конструкции:
(Тут кстати попутный вопрос: это нормально, что идут сразу два обращения к одному и тому же ресурсу:
или это можно как то оптимизировать?
На самом сайте добавляю код (согласно статье):
Таким образом, получаю, как и хотел, две переменные - все отлично.
Но вопрос, как закешировать файл с двумя переменными?
file_get_contents, по идее, должен быть один (зачем 2 раза его тянуть?).
Уже разбирая полученный результат вы можете вводить разные переменные: $pos, $pos2...
Вячеслав, вот не совсем понятно, как разбирать. Сейчас код имеет вид:
//вывожу на сайт:
Подскажите, пожалуйста, как его модифицировать, чтобы запрос к донору был один. И по поводу кэширования с двумя переменными тоже остается для меня загадкой...
Пришлите ваш код посредством обратной связи на сайте (кнопочка внизу)
Вячеслав, спасибо огромное за статью. В результате кучи мучительных проб и ошибок в практике парсинга, получилось только по твоему рецепту!
Не выходит только с картинками.
На доноре путь к картинкам относительный, с 6-мя уровнями вложенности, причем, имя одной из папок меняется.
Т.е. путь к изо выглядит так:
http://донор.ru/папка_1/папка_2/папка_3/папка с переменным названием_$1/папка_5/изо1.jpg
http://донор.ru/папка_1/папка_2/папка_3/папка с переменным названием_$1/папка_5/изо1.jpg
...
http://донор.ru/папка_1/папка_2/папка_3/папка с переменным названием_$n/папка_5/изо_n.jpg
Можно ли с этим что-то поделать?
Картинки можно грузить прямо с донора, заменив относительный путь на абсолютный.
В данном скрипте не предусмотрена закачка картинок донора, да и в большинстве случаев это и не нужно.
УРРА!!! получилось, я на небесах!
Благодарю, Вячеслав!
Опять не все радужно. Все браузеры выводят картинки, а хром не показывает.
Бывает, сдуру, как только сайт грузится, хром часть картинок показывает, но при перезагрузке страницы все изо исчезают напрочь, хотя спарсенный текст выводит исправно.
Может у хрома в движке защита какая работает?
Можно ли какой нибудь костыль для этого применить?
Смотрите консоль в Хроме!
Вячеслав подскажите пожалуйста, как мне сделать сайт который будет отображать данные сайта донора где 50 миллионов страниц.
Скрипт парсинга обычно располагается на одной странице. В него передается параметром урл для парсинга. Таким образом: у вас будет на сайте физически 1 страница, а в поиске может быть хоть 50 миллионов. Правда при условии, что ваш хостинг выдержит сканирование такого объема поисковыми ботами (что не так просто на практике)
Добрый день! По предложенному Вами в статье коду получилось спарсить необходимую информацию с сайта-донора. Сейчас есть необходимость подтянуть на свой сайт иную информацию, но проблема в том, что этот сайт открывается по адресу http://193.7.160.230/web/esimo/black/wwf/wwf_black.php и с предложенным ранее кодом спарсить этот материал не получается. Подскажите, пожалуйста, как правильно парсить информацию, открывающуюся на сайте с подобным адресом? Благодарю!
Парсить как и обычно (предварительно загрузив стили и js файлы на свой сервер и подключив их в результативном файле)
Здравствуйте Вячеслав!
Подскажите пожалуйста, а как спарсить информацию например по коду товара?
К примеру есть интернет магазин где размещен товар у которого есть код (артикул), а также указано его количество, которое постоянно меняется.
Как по коду (артикулу) парсить меняющееся количество товара?
Заранее спасибо!
Здравствуйте Вячеслав. Спасибо за инструкцию как спарсить данные с другого сайта, получилось перенести топ100 на страницу http://game.speed100.ru/Top100, но есть еще вопрос. На самой странице топ100 соответственно 100 игроков, которые могут меняться, в зависимости от их активности игры. Вот как парсить данные с ссылок каждого игрока http://game.speed100.ru/InfoUser?ID=Keri5Java, т.к. там имеется небольшая статистика проведенных игр.
А возможно вырезать несколько фрагментов из кода на одной странице? Допустим div до закрытия div и p и до закрытия p?
Попробуйте создать 2 обработчика события, то есть введите новые переменные: $pos2 и $content2 в рамках одного скрипта
Здравствуйте. Реализовал парсер на PHP.
Все получилось. Вывел меню (пример меню далее):
Новости:
Если нажать на ссылку Новость №1 или Новость №2 и т.д. переходишь на основной сайт m.ya.ru/.... Как сделать так что при нажатии ссылки реализовался новый парсер? Сами новости и ссылки регулярно меняются и невозможно прописать конкретный адрес. Если возможно покажите на конкретном примере. Спасибо.
1. Допишите к спарсенным ссылкам:
это можно сделать так:
Теперь в parser.php принимайте переменную:
И подставляйте ее как новый урл для парсинга:
Принцип понятен. Только при переходе по ссылке попадаешь на предыдущую страницу. Думаю это из за спец символа &. Возможно он делит ссылку. Как это можно обойти?
Все верно. Символ & из урла теряется путем передачи GET запросом. Вижу выход изначально перед оправкой кодировать и потом декодировать урл, но как это сделать - не знаю. Что скажет гугль?
А $_POST тоже самое возможно сделать? Конечно интересный вопрос с этим get.
Возможно. Но $_POST запросом не будет формироваться ссылочная структура на сайте (данные не передаются в уникальной строке браузера)
Да. Вы правы. Только не понятно: а что кодировать? Ведь второй кусок ссылки неизвестен. Да и меняется он. Гугл дает только urlencode, а как его сюда применить - не понятно.
Я только понял, что...
Извините, что пристал, но меня тоже интересует данный вопрос. На всех сайтах работает, а где спец символы нет.
Заметил что если во втором файле $content = file_get_contents($url); за место $url подставить адрес, где будет спец символ, то страница открывается, а в адресной строке прописан адрес который мы передали через get. Так вот можно заменить в $content = file_get_contents(сюда подставить то что отражается в адресной строке браузера);
$url передается через get запрос, где его собственно и режет. Есть методы кодирования и декодирования $url при передаче, просто поищите.
Здравствуйте Вячеслав.
На планшете почему-то вижу красные/зеленые строки такого же цвета как обычный текст, поэтому не понятно что вставлять в последнюю строку где "........." или это там просто текст перманентный, уточните пжл.
И что если на сайте не текст, а код
то есть я про marker_price_usd, на стороннем сайте это имеет вид цифр, которые и требуется извлекать и отображать на своём сайте.
Такие значения парсить так же как в статье описано или как-то иначе?
Спасибо за разъяснения.
День добрый! Подскажите если в контенте находятся изображения, они в данном парсинге не выводятся?
Если путь картинки указан абсолютный, то как и обычный html код, будет показана картинка с внешнего сервера в спарсенном контенте.
Если путь относительный, то естественно, вы не увидите картинки (так она будет искаться на вашем сервере, где ее нет).
Ситуации можно исправить, добавив некоторую обработку кода:
При таком раскладе открывается та же самая страница.
При каком раскладе? На шаге 2 (два) вы должны парсить содержимое новости (как я понимаю), а вы по-прежнему парсите ссылки новостей.
[ php]
$content = file_get_contents('http://мой сайт/parser.php');
echo $content;
[ /php]
При вставки данного кода весь сайт наперекосяк!!! ПРИЧИНА?
А сам php срабатывает? Если да, значит в нем не закрытый какой-либо тег (таблицы, блока и т.д.). Для начала запустите сам скрипт мой сайт/parser.php и проверьте его на валидность, например здесь: https://validator.w3.org/nu/
Да, сам скрипт срабатывает.
вот что выдал валидатор
-------------------------------------------------------------------------\
Error: Start tag seen without seeing a doctype first. Expected e.g. .
From line 1, column 1; to line 1, column 24
<a hre
Error: Element head is missing a required instance of child element title.
From line 1, column 1; to line 1, column 24
<a hre
Content model for element head:
If the document is an iframe srcdoc document or if title information is available from a higher-level protocol: Zero or more elements of metadata content, of which no more than one is a title element and no more than one is a base element.
Otherwise: One or more elements of metadata content, of which exactly one is a title element and no more than one is a base element.
Error: Stray end tag div.
From line 4, column 13; to line 4, column 18
↩
Error: Stray end tag div.
From line 39, column 9; to line 39, column 14
>↩ ↩ ↩ ↩ <
Error: Stray end tag div.
From line 272, column 1; to line 272, column 6
Error: The itemprop attribute was specified, but the element is not a property of any item.
From line 2, column 17; to line 2, column 57
Боевик
Error: The itemprop attribute was specified, but the element is not a property of any item.
From line 3, column 21; to line 3, column 80
16+</d
Так не разобрать, нужно видеть в живую
Проверьте на валидаторе
Там 4 не открытых div.
Смотрите ошибки: Stray end tag div
Естественно, будет ломать верстку.
Будем пробывать
Спасибо мил человек, как говорят век живи век учись!!!
Попался как ШКОЛЬНИК даже неудобно
Добрый день Вячеслав!
Еще один вопрос: как захватить изображения?
Если ссылки относительные, делаем их абсолютными:
Если Вас интересует парсинг картинок с закачкой на свой сервер, то это уже отдельная тема для отдельной статьи.
Спасибо за помощь Вячеслав, но чет с картинками не получается... Благодарю.
Очень полезная статья. Но, в php не силен, поэтому у меня возникла проблема с выводом спаршенного контента. Мне нужно вывести спаршенный текст на странице straniza.php в определенном месте, например между тегами . Как это сделать? И еще, не совсем ясно, что вставлять в последней строчке между кавычками: echo "вставляем сюда завершающий код";
Можете ничего не вставлять, если спарсенный контент не ломает всю верстку вашей страницы. Например, при парсинге, может отсутствовать завершающий </div>, </span>, </table> и т.д. Поэтому, если его нет в спарсенном контенте, то «вставляем сюда завершающий код».
Со всем разобрался, все работает. Еще такой вопрос: можно, как-то парсить текст, например, те же гороскопы, которые меняются каждый день, и выводить на определенной, отдельной странице, завтра спарсить новый текст и вывести на новой тсранице и так далее, сохраняя прежние, отдельные страницы, генерируя тем самым новые?
Вячеслав, подскажите как заменить значение на свое при выводе, например слово на англ. заменить на русское?
Доброго времени суток, у меня самописный движок написанный на php + mysql . Файл parser.php такого формата - sql_parse.php
внутри вот такая байда...
с переводом выглядит вот так..
1.Что можете посоветовать? раньше вроде парсил но с ошибками.
2.Файл htaccess и robots могут блокировать функционал парсера?
3.если можно - ответьте на почту,
Я уже писал сюда, но похоже автор счел мой комент неуместным. Да и бог с ним.
1. Спасибо огромное, правда говорят, что обучение процесс двух людей, ученика и учителя, и неважно кто и в какой роли выступает на данном этапе. Важно, что есть те кто не умеет объяснить, а есть те кто может.
2. Для тех кто юзает Yii 1 , (личный опыт) , чтоб вывести $content необходим в view или index добавить вот такой код:
3. Вопрос в зал, ну и к автору. Я получаю страницу с новостями, ссылки заменил, ненужные теги убрал (хотя это пипец), представте если с сайта приходит ссылка : прокоментировать
Как? такое вырезать.
4. Ну наконец такой вопрос - а мы можем вырезать между определенными тегами в оном парсере.
Чтоб было понятно:
Автор! От ныне я твоя фанатка!
Все просто и доходчиво написано, даже я - блондинка, разобралась)
Есть вопрос: а можно ли вот такой "фокус" только наоборот?
что бы парсер был на HTML
как сделать поиск спарсеного контента? т.е. поиск с чужого сайта но вывода на своем
Добрый день всем,хотелось бы поблагодарить Вячеслава(автора этого проекта) за доскональные и понятные ответы,потому как не все свободно плавают в интернете и только помощь таких мастеров инета помогает нам с малым опытом.
Наипростейшее и наипонятнейшее решение. БлагоДарю вас!
У меня такой вопрос. Если информация на странице выложена в виде анонсов, как новости, а необходимо открыть полный текст, и именно его записать на страницу (конкретную php страницу) в виде html кода.
Здравствуйте.
Парсер работает на все 100.
Однако наткнулся на проблему.
Текст(рандомный)
Текст(рандомный)
Текст(рандомный)
Как спарсить все три строки, если они все начинаются одинаково? (при парсинге страницы данный скрипт парсит только первую строку)
Смотрите выше, наверняка
Текст(рандомный)
Текст(рандомный)
Текст(рандомный)
обрамлен каким-то общим тегом.
Вячеслав, спасибо за парсер, всё работает. Подскажите как сделать, чтобы спарсенный текст, например курс доллара, считывался как число с плавающей точкой, и потом можно было бы выводить цену в рублях, перемножая курс на цену в долларах.
Заранее спасибо.
Если вы парсите данные курса валют (например, как здесь http://seo-zona.ru/kurs-valyut-na-php-delaem-informer-iz-xml-2015-12-13.html), то все значения у вас будут в переменных. С этими переменными вы можете осуществлять любые математические функции на php.
Спасибо, Вячеслав....попробую сделать через XML, парсил просто по коду как в этой статье....
Вячеслав, Здравствуйте.. у меня чуть не стандартная ситуация сможете помочь с парсером?
мне надо с этого контента http: //***/#/ вытащить конкретную информацию скажем Pool Hash Rate
в таблицу на свой сайт ? ка это реализовать. Я пробовал вашим скриптом но ничего не получилось
Ответил Вам на почту
Подскажите, как сделать так, чтобы к спарсенному контенту добавлялся адрес.
Так как парсится код с картинками, а картинки на сайте доноре указаны не явным адресом т.е. без указания адреса сайта.
Перед выводом спарсенного контента, заменяйте нужную вам информацию на свою. Например, вам нужно вставить адрес к картинкам (если он не указан):
Здравствуйте
Прошу подсказать как сделать так чтобы ваш парсер парсел по url но чтобы этот url я мог менять и спарсеные данные записывать в базу данных
И также хотелось бы узнать как сделать так чтобы ваш парсер мог если указано url главной страницы сайта а там указано кородкая новости сайта то парсер мог переходит на полную новости сайта и оттуда собирал инфу и записывал в базу данных
Что касается первого вопроса, то все просто. В самое начало скрипта добавим, вместо строчки:
Такой код:
Теперь вы можете обращаться к вашему скрипту и передавать ему параметром GET разные url, например:
По поводу второй части вопроса. Спарсенные данные у вас в переменной $content. Собственно, эту переменную и записываете в базу, например (запрос к вашей базе не подойдет, все индивидуально, показано лишь для наглядности):
Спасибо работает но у вас Отпечатка нужно убрать )
И также хотелось бы узнать как сделать так чтобы ваш парсер мог если указано url главной страницы сайта а там указано кородкая новости сайта то парсер мог переходит на полную новости сайта и оттуда собирал инфу и записывал в базу данных
В рамках данного скрипта такое сложно реализовать. Нужно писать второй скрипт, который дергает все ссылки-анонсы, помещает их в массив, а уже там вы ими оперируете и передаете ссылки в скрипт, который мы совместно с вами написали.
Если это не сложно можем ли мы его написать
Данный ваш парсер я использую для парсенга из авто сайта у всех авто сайтов нет RSS и ваша тема тут как раз нужная
Чтобы писать - нужно время!
А как же http://feed43.com https://feedity.com и им аналогичные сервисы построения RSS из контента?
То что по ссылки и те что в интернете не подходить
То что вы пишите она то что нужно но нужно немного доработать чтобы его внедрить в свой CMS
Вы пишите казалось бы простой код зато его легко доработать и внедрить в свой CMS и при этом она работает
И на мой пожалуйста:)
С http все работает отлично!!! Как быть с https?!
какая разница то? я например mail ru c https запросто получаю. Скорее всего ты что то не так делаешь =)
Да нет, я все то делаю! Просто по http все норм, c https не чего не выходит. Искал в сети, куча тем куча решений, но эти решения либо не работают либо заморочены на столько, что я тупо не вытягиваю:)
Сбрось свой пример парсера с майла!
лучше ты напиши сайт который хочешь с https сделать .... и что в нем спарсить... я тебе сделаю и скажи куда скинуть....
Ну вот с майла, к примеру я хочу спарсить гороскоп Овна(текстовую часть)
https://horo.mail.ru/prediction/aries/today/
в php теги не забудь подставить
теги вырезались https://yadi.sk/d/G4FvamBItWR48 закачал на яндекс файл
Да, сработало... Видимо я где то тупанул:)) Спасибо!
Привет как сделать rss спарсеного сайта?
Вопрос непонятен до конца.
я сделал полностью копию сайта "лента.ру" мобильная версия, даже со своим дизайном, Пример: Liareg.ru
Но поскольку новости не в базе MYSQL не могу создать rss ленту....
mysitemapgenerator.com/rss/create.html этот сайт отлично справляется но обновляемая лента платная... Может знаешь как создать генерируемую rss ленту на php без mysql . В интернете не нашел толком ничего
Уточните, вы тяните новости по урлу или записываете их в файлы на своем хостинге?
Если у них однотипная RSS, берите RSS аналогично у них, подменяя урлы на свои.
по урлу... на сайте всего три файла ,index , url , и мои style
я пробывал парсить так же как сайт, rss, и заменить ссылки на свои, но там теряется структура xml.. получается ссылка и название, на rss файл совсем не похоже=)
С http все работает отлично!!! Как быть с https?!
Выдает вот такую ошибку! Не подскажете что делать?!
Функция в php.ini включена, написано - allow_url_fopen = On
Подскажите как можно спарсить товар и заменить цену??? Я спарсил, вроде все ровно, но надо заменить цену... то есть не в рублях а к примеру в долларах, как можно сделать?
Загрузите данные в Exel, там можно в таблицах многое сделать!
Вячеслав приветствую,хотел сделать бегущую строку с информера погоды,и столкнулся проблемками
Сам информер на сайте донора имеет такой вид
846
°C
°F
ощущается как 5 °C41 °F2 часа назад на метеостанции (38 км) было +5.8 °C,
+42 °F, пасмурная погода, атмосферное давление в пределах нормы, высокая влажность (71%), легкий ветер (2 м/с) (7 км/ч) (4 мили/час) (4 узла) (2 Бфрт), дующий с северо-северо-востока. Слабый дождь.
Мне что все лишнее вырезать через str_replace или есть варианты?
Мне нужно привести все это к виду
8
ощущается как 5 °C
пасмурная погода, атмосферное давление в пределах нормы, высокая влажность (71%), легкий ветер (2 м/с) (7 км/ч)
Здравствуйте, подскажите, как вывести последнюю серию с помощью парсинга. Код выглядит к примеру вот так:
Серия 2
Серия 3
Серия 4
Серия 5
Серия 6
Серия 7
все что мне нужно это вывести последнюю серию, то есть "Серия 7"
В принципе, все элементы можно поместить в массив и извлечь последний элемент посредством array_pop
Пример:
Хотя целесообразно исходить из имеющегося кода.
Добрый день. Позволю дополнить парсер, фоновым обновлением спарсенного контента. Полезно, например, для парсинга расписания электричек.
1. Создаём файл .html
2. В пишем:
//кодировка
//подключаем jquery: просто указываем путь до библиотеки,которая наверняка уже есть на сайте.
3. В пишем:
//выводим контент в контейнере.
4. В парсере,самой первой строкой,после <?php, я бы поставил кодировку:header('Content-Type: text/html; charset=utf-8'); дабы избежать кракозябров.
П.С. Побольше нужно таких ресурсов, как Ваш. Спасибо за парсер! Кратко,ёмко и по делу.
Теги вырезались,поправлю:
2. В заголовке пишем: Charset=UTF-8 //кодировка
jquery-1.3.2.min.js//подключаем jquery- просто указываем путь до библиотеки,которая наверняка уже есть на сайте.
3. В теле пишем див: div id="content" и тут-же закрываем div ,естественно заключаем дивы в ">" //выводим контент в контейнере.
Далее по первому тексту...
Роман, понятно. Я не силен в JS, подскажите, если параметр в ajax поставить cache: true, то как и каким образом происходит кеширование данных, как управлять интервалом кеширования? Само кеширование - актуально для посещаемых ресурсов.
Что-то мне подсказывает, что включать кеш нет необходимости. Т.к. велика вероятность, отображения старой\закешированной информации.Но так как я и сам не силён в jquery, предлагаю с позволения ссылку на неплохой мануал по функции ajax http://jquery.page2page.ru/index.php5/Ajax-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81
Здравствуйте, вы не могли бы дать пример рабочего кода в файле parser.php и куда его положить в вордпрессе и где конкретно если можно так сказать путь нажатий прописать другую часть кода на странице и какого если можно рабочий пример.
В статье приведен код парсера php (здесь можете посмотреть реализацию), пример внедрения на страницы Вордпресс, пример реализации на стороннем сайте...
Вячеслав, огромное Спасибо + небольшое "спасибо" отправил на WebMoney.
Кстати, здесь:
[ php]
$content = file_get_contents('http://мой сайт/parser.php');
echo $content;
[ /php]
после квадратных скобок стоят пробелы, и пока я их не убрал, ничего не работало. Насколько я понимаю, сделано это намеренно, но для тех, кто не в курсе, наверное, можно об этом упомянуть.
Спасибо, Иван! Про скобки все верно, иначе не дает опубликовать код на сайте в статье!
Очень интересная статья.
Но вот какой возник вопрос - а реально подобными действиями спарсить весь сайт полностью? Т.е. сделать зеркало на другом домене. При этом сайт только на PHP и TXT, DAT файлах.
морально-этическую сторону не тревожим, там всё ОК. Просто готовится переезд, который затянулся уже на годы... :(( А ежедневно обновлять вручную файлы не хватит никакого времени.
Спарсить можно, но это будет html-версия сайта (без движка).
Можно перетянуть контент сайта таким же образом на движок, но это уже будет парсинг+настройка сайта
Вопрос. А как сделать зависимый парсинг?
например мне надо для каждой игры свой рейтинг
есть название которое потом можно вклеить в путь сайта донора
$content = file_get_contents('http://tesera.ru/game/Spot_It/
должно менятся фрагмент "Spot_It" на название другой игры .. страница которой открыта пользователем в интернет магазине
До конца не понял, но вам нужно использовать переменные (передавать их в скрипт POST или GET запросом).
Для начала Все работает, помогло с первого раза разобрался
щас в joomla попробую впыжить ))
Вячеслав, а поисковики за это не наказывают? Вроде же текст копируется с другого сайта и он является уже не уникальным, а значит плагиатом попахивает....
Я не призываю парсить Вас авторские статьи, парсер полезен для информеров погоды, курса валют, расписания кинотеатров и т.д.
Добрый день. Подскажите, в чём может быть проблема - при вставке в вордпрессовский редактор кода
на странице ничего не отображается, хотя любой другой php-код в редакторе работает нормально.
Может ли быть причина в том, что функция file_get_contents запрещена на моём хостинге? Можно ли это как-то исправить?
Для начала проверьте, мой сайт/parser.php - не вызывает белую страницу?
И поинтересуйтесь у поддержки хостинга, включена ли функция file_get_contents? Если нет, то какие из альтернатив.
Виктор Андреевич, попробывал спрасить сайт. Все получилось. Но вот когда возникла задача спаристь около 100 сайтов хорошо погуглив нашел более универсальное средство. Программу DataCol.
Спарсил таблицу, в ней внешние ссылки, на чужой сайт, помогите сделать ред директ со скрытием ссылки, перехват страницы при нажатии на ссылку, парсинг ее (там разные ссылки) и вывод в определенном месте. у меня все на dle
Вам нужны 2 парсера, первый парсит таблицу, второй будет парсить данные по ссылкам из этой таблицы.
В первом парсере, вы должны преобразовать внешние ссылки:
Итак, у нас в таблице парсера N1 теперь появились ссылки ведущие на парсер N2 и передающие в переменной id часть ссылки, с которой будет он парсить.
В url.php (парсер №2) перехватываем переменную id:
А далее стандартный код нашего парсера:
первый пункт сделал, ссылки изменились.
создал урл.пхп залипил его в шаблон все отображает на сайте, но только если в этом файле указать конкретно страницу. немного не понятно потому что каждый день в таблице разные ссылки
сайт/online/111111.html потом сайт/online/22222.html как сделать так что бы в строке $content = file_get_contents('полный урл страницы с http:// с которого будем вырезать информацию'); указывалась страница с неизвестным именем например сайт/online/{url} или {name}.html и вообще не понятна зачем эта строчка когда есть вот эта $fullurl="http://чужой_домен/" .$_GET["id"]; она же обратно меняет мой домен на чужой? и парсит не хватает только кончания ссылки я так понял а строчку с полным доменом наверно же убрать можно будет?
Я, честно говоря, ничего не понял из-того что вы написали.
Если каждый день в таблице разные ссылки, то ссылки мы же не меняем!!! В парсере 1, мы вырезаем чужой домен (не ссылку целиком, а лишь домен из ссылки), а в парсере 2 - вставляем чужом домен к оставшейся части ссылки, которую передали по id.
В парсере N2, откуда парсить, будет выглядеть так:
Дружище, как и обещал, разместил на сайте http://liasport.ru ссылку на твой блог. в самом низу "помощь в разработке"! если надо текст поменять скажи! ты меня реально выручил, надеюсь что и в будущем не откажешься от помощи!
Спасибо. Приятно!
Привет, не подскажешь, а можно ли сделать после всех махинаций , когда домен получается вида http://МОЙ ДОМЕН/url.php?id=category/4/ сделать ссылку ЧПУ. пробывал через .htacces не получилось
Изменить ссылку через htacces еще ничего не значит. Сама ссылка должна работать по ЧПУ - а это уже на уровне скрипта.
раньше все парсилось с одного сайта но в один день стало Warning: file_get_contents(): Couldn't resolve host name in
менял на www и тд не помогает, а если айпи сайта прописываю то нормально , означает что это защиту сделали? или как то можно обойти?
Эта ошибка говорит вам, что компьютер не может найти сайт, который вызывается в file_get_contents.
Скорее всего, вы или слишком часто обращаетесь к удаленному сайту (на нем срабатывает защита), либо ваш ip заблокировали вручную.
Полученные данные по file_get_contents хоть кешировались на Вашей стороне?
помоги пожалуйста вырезать полностью тег например ... и все что у него внутри
$content = str_replace('','', $content); через эту строчку не получается!
ip сайта? я пробывал с другого домена...тоже ошибка, другие домены парсил все нормально..
ну до этого все нормально было... а если добавили как обойти? и как скрыть что парсится сайт?
скрипт работает, а вот iframe код который расположен в странице , помимо нужной информации, вырезается! как сделать что бы не вырезался? а вставлялся тоже ко мне на страницу?
Если iframe есть в исходном коде страницы, с который вы парсите информацию, то он должен попадать к вам на страницу!
Вот я спарсил гороскоп
от "Общий гороскоп на сегодня..." до "вставляем сюда завершающий код"
как мне внутри текста добавить дугой код...который выводит рекламу? перед тегами
Понятно когда требуется спарсить данные с одной страницы. Что делать когда есть необходимость парсить данные с 20-30 разных страниц одного сайта по одному наименованию и таких сайтов 10-15? Неужели писать такой код для каждой страницы каждого сайта? или можно как-то облегчить процесс?
доброго времени суток, а как мне сделать чтобы считывалась информация с ask.fm (лайки подари вопросы, определённого пользователя)
У этого пользователя есть ведь своя персональная страница (уникальный урл)? Открываете исходный код и парсите нужные вам блоки. В статье ведь все написано!
выходит следующее:
-вставляем сюда завершающий код
Если вы больше ничего не видите (т.е. echo $content - пустое, значит неправильно настроили параметры: вырезать ОТ (//Определяем позицию строки, до которой нужно все отрезать) и ДО (//Точно таким же образом находим позицию конечной строки)!
очень благодарен за данный код и за помощь в исправлении ошибок, а статья о кешировании вместе с кодом очень полезна http://seo-zona.ru/informer-kursa-valyut-svoimi-rukami-2014-08-03.html, результат кода с кешированием http://buda-koshelevo.net/afisha-kinoteatra-kryinitsa/ автору огромное спасибо!
Здравствуйте!
А почему при обращении к парсеру у меня просто белая страница и все?
Здравствуйте Артем! Пустая белая страница - это указание на то, что нарушен синтаксис кода. Проверьте, все ли кавычки, скобки и т.д. на своих местах в вашем коде?
Вячеслав,спасибо Вам за оперативный ответ!
Мне конечно крайне не хотелось показаться тупеньким, тем более Вы написали "что это самая простая реализация парсера на php", да и по коментам видно,что проблем практически не возникает. Но тем не менее...
При обращении к " http : // мой сайт / parser . php " , возникает вот это;
и так вся страница в спарсенном контенте! Подскажите пожалуйста, в чем ошибка?
Здравствуйте еще раз! Ответ на ваш вопрос есть в статье: "Если наблюдаются иероглифы в спарсенном контенте, последнюю строчку в этом коде перезаписываем на что-то типа этого:
Со значениями windows-1251 и UTF-8 играем, переставляя (зависит от начальных кодировок сайта донора и пациента)."
Вячеслав Здравствуйте!
Спасибо за подсказку,но у меня не получается!
"1| echo iconv("windows-1251", "UTF-8", $content);" нужно вместо " 25| ?> " или " 25| ?>echo iconv("windows-1251", "UTF-8", $content);"? И если у меня на спарсеной странице "кодировка ISO-8859-5",а у донора UTF-8, то мне нужно переставлять местами "ISO-8859-5" и "UTF-8"?
Попробуйте так:
или
А можно ли как то указать в этой строке:
...
...
div с конкретным классом или id ?
dima, а почему нельзя? При его указании не работает парсер?
Вот например я себе на сайт публикую ... , и хочу на этой же странице пропарсить определенный div, но ничего не парсится...
...* это тег айфрэйм
Заметил, что когда прописываю код
слова заменяются, но когда --в том тексте, где нужно избежать кракозябель-- я вставляю этот код
слова, как по волшебству перестают заменяться на те, которые мне нужны!
То есть, слова в парсере заменяются, если вызывать скрипт напрямую: мой сайт/parser.php ?
А при перекодировке не вырезаются?
Не совсем Вас понял.
В обоих случаях вызываю через панель wordpress.
В том случае, когда последняя строчка кода записана как: echo $content; - текст заменяется
В том же случае, когда я записываю в последнюю строчку кода: echo iconv("windows-1251", "UTF-8", $content); - текст не изменяется.
Скиньте мне ваш код в личку, удобным вам способом http://seo-zona.ru/contact
Постараюсь подсказать где конфликт.
Не забудьте указать сайт, на котором код вызывается.
Вячеслав, моей благодарности не предела) Благодарю!
Но после этого в тексте перестали заменяться слова..
Пытаюсь заменить ненужные слова на новые при помощи этой части Вашего кода:
//если в тексте встречается текст, который нам не нужен, вырезаем его$content = str_replace('старый текст','новый текст', $content);
Вячеслав, хороший код. Но есть проблема. Вставляю его на сайт, работающий на wordpress 3.7. Вылазают иероглифы вместо нормальных букв. Я, по Вашей рекомендации в админке wordpress-а, в разделе страниц, заменяю последнюю строчку кода:
на
После этого спарсенный текст вообще не появляется..
Виктор Андреевич, обратите внимание на кавычки (открывающие и закрывающие) в коде («windows-1251″). От этого код не будет срабатывать и вызывать ошибку.
Вам сюда http://seo-zona.ru/10-veshhej-kotorye-ya-delayu-posle-ustanovki-wordpress-2013-11-18.html 5 пункт
Спасибо автору! написано "живым" языком и доходчиво! Молодец, что тут сказать!
Вещь хорошая, но яндекс не одобрит.
Еще как одобрит, бот он и в африке бот. Понятно что это не кнопка бабло, это один из ее элементов. Автору огромное спасибо _)