Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > Как парсится информация с других сайтов? |
Автор: americanets 15.2.2007, 20:38 | ||||
Как выдернуть необходимую информацию с другого сайта, например с вингарда ![]()
|
Автор: murod 15.2.2007, 20:48 |
его можно получить AJAX ом. Делаеш запрос по нужному адресу. Получаеш ответ и парсиш на JavaScript'e |
Автор: americanets 15.2.2007, 22:29 |
а при помощи php как ? |
Автор: mishaSL 16.2.2007, 18:01 | ||
Саму страницу берешь через curl или сокеты, как вариант вот так:
А далее регулярные выражения: http://forum.vingrad.ru/topic-131511.html http://php.net/preg_match Добавлено @ 18:02 murod, совсем не нужен тут AJAX. |
Автор: BuShaRt 26.2.2007, 16:52 |
mishaSL, а почему бы просто не взять странцу функцией file |
Автор: mishaSL 26.2.2007, 18:31 |
Т.к. это не безопасно. На эту тему можешь прочитать следующую статью: http://vingrad.ru/PHP-PHPNETHTTP-003044 |
Автор: mishaSL 1.3.2007, 20:35 | ||||
Огромная разница когда скрипт виснет или когда скрипт корректно завершает работу через скажем 10 секунд.
Через тотже curl при передачи некорректного url ошибка не появляется и скрипт не виснет, а ошибку без проблем получаем curl_errno() или curl_error(). Если передать некорректный url в file_get_contents(). То соответственно возникает Warning. И еще не надо забывать то, что в большинстве случаев необходимо получить код ответа сервера. В данном случае хотябы проверить 200 или нет... В общем Powerhead, PHP позволяет осуществить эту задачу различными способами, но для каждой задачи предназначены определенные функции. Функции fopen, file, file_get_contents предназначены для работы с локальными файлами. А для работы c удаленными файлами предназначены функции с сокетами и curl-ом. |
Автор: Powerhead 2.3.2007, 03:45 | ||||||||||
В случае fopen, file_get_contents и тд, скрипт сразу же выдаст вполне корректный warning на несуществующий хост или страницу. Зачем усложнять себе жизнь? Конечно, если нужен скрипт с функциональностью броузера - тогда согласен. Но, в большинстве случаев, проще воспользоваться врапперами http, https, ftp и тд, которые все поддерживаются fopen. Таймаут на tcp соединение устанавливается очень просто: ini_set('default_socket_timeout', 10); и по умолчанию равен 60.
А по-моему, в большинстве случаев это лишнее. Но если сильно нужно, то разве не проще так?
Получаем:
Далеко не только для этого: http://www.php.net/manual/ru/wrappers.php |
Автор: BuShaRt 2.3.2007, 17:48 | ||
Хм, не безопасно? а ты хочешь пользовательский интерфейс для парсинга делаешь что ли? тогда быть может, а вообше парсеры как правило юзаються из админки, ну а если у тебя дырявая админка, то тут уже нету разнцы, что ты юзаешь... Да и проблем не каких не было с $file, отлично он все воспринимает и подготавливает файлы к парсингу) |
Автор: mishaSL 2.3.2007, 21:06 | ||
Что значит вполне корректный warning? Warning - это и есть warning, он не может быть корректным или нет. BuShaRt, Powerhead, я не пытаюсь вас переспорить, я пытаюсь объяснить минусы данного подхода. В грабере необходимо проверять получил ты ответ 200 или 404 к примеру. Получяя информацию с помощью stream_get_meta_data(), при ответе сервера(к примеру 401, 404, 503 и т.д.) данная функция не будет работать и fopen будет возвражать warning. И соответственно разработчика (т.е. нам) не узнать отклик, либо новость поменяля адрес (404), либо сайта больше нет (тогда его необходимо занести в отдельный список для дальнейшей проверки) В этом подходе есть минусы, которые приводят к warning-ам, что очень плохо. И недостаточность получаемой информации... Со стороны хостеров - это уменьшает возможность XSS атак, причем очень сильно уменьшает... А зачем оставлять такую возможность, если без allow_url_fopen можно обойтись.
Причем тут готов или нет... А если адрес устарел или еще что с ним... |
Автор: americanets 7.3.2007, 12:14 | ||||
Загружаю курс валют с ЦБ, на локальном компьютере все ОК, а вот на сервере не работает, они закрывают доступ к внешним данным (Warning: fopen(http://www.cbr.ru/scripts/XML_daily.asp)) можно ли его обойти?
на,
Но что-то не работает ? |
Автор: mishaSL 7.3.2007, 17:22 | ||
Вот так должно работать:
|
Автор: americanets 9.3.2007, 13:50 |
работает а что за функция curl_init() ? |
Автор: mishaSL 9.3.2007, 14:33 |
http://ru.php.net/curl_init - Инициализирует сеанс CURL |
Автор: lasalexx 20.3.2007, 23:05 |
если CURL не сможет открыть страницу в течении time_out а, то скрипт прервёт работу, или работу прервёт лижь функция, а скрипт дальше продолжит работу? |
Автор: mishaSL 21.3.2007, 15:27 |
да, работу прервет функция. ![]() |
Автор: CyClon 14.4.2007, 12:33 |
Почему я чаще использую сокеты, а не file для работы с удаленными страницами? Потому что многие сайты любят выдавать заголовок Location... |