Данные страницы
есть у меня несколько html страницы и появилась такая необходимость выбрать из них данные, сложность заключаеться в двух вещях первая сложность как переходить по страницам, тоесть во время выборки нужно переходить из одной страницы на другую и ещё эти страницы находяться на сервере.
Пример есть есть сайт pptp.com на нем есть три страница
index.html, index1.html, test.html
чтобы к ним получить доступ надо зайти по адрессу pptp.com/index.html (данный адресс может и несуществовать это приводиться как пример)
Второй вопрос заключаеться в том как мне можно программно получить данные из страницы тоесть когда открываеться страница чтобы html код мог обработать мой скрипт, или хотябы получить из него данные.
P.S. похожую тему я создавал но ненашол
копай в строну regExp или DOM любыми средствами :) парсер это называется... глядишь того и догадаешься....
LWP(Perl) или CURL(PHP) и регулярные выражения тебе помогут.:)
Я в принципи не грабить хочу а немного автоматизировать работу предприятия
ну как сказать как сказать, контент ведь все равно незаконно и без ведома полученный будет... вот как бы вот так... а если бы администрация сайта тебе сама давала контент (рассылкой или там RSS или чем еще...), то всё было бы просто...
Вроде бы в УК и других нормативных документах такой статьи нет :)
Как тогда быть с ботами поисковиков - они тоже вне закона? :)
А если кто-то, например, пишет новый поисковик - его боты тоже в топку?
Вопрос скорее риторический, и видимо все связано просто с личной неприязнью автора к парсерам ;)
Как я понял предложение через парсер имелось ввиду во индексировать страницу, тоесть написать какойто скриптик который будет индексировать стриницу, адресом которой будет адрес нужной мне страницы, потом когда страница будет проиндексирована, тоесть её текст будет мне известен этот текст к примеру или обрабатывать через javascript(сразу же на странице) или записать в документ и обрабатывать любым другим языком программирования. Правильный ход мысли?
разбираешь её по кускам.... а эти куски будут обычным HTML-кодом. я думаю, найти ссылку <a href="URL">Text</a> и вытащить из этой строчки URL, труда не составит... вот и получишь URL, который надо парсить (от англ. parse - анализировать, разбирать)....
всё зависит от того, что ты хочешь получить с этих страниц...
по первому вопросу (переход по страницам) я тебе ответил.
по второму - "брать данные" со страницы (парсить страницу), можно средсвами регулярных выражений в PHP....
в общем, если будут конкретные вопросы - пиши. в аську, в личку, сюда =)) как хочешь ;)
ЗЫ: никакой неприязни нет к парсерам... писал я их много и долго, просто надоело :)
Код:
$URL = "http://servant.domain/doc.ext";
$HTML = file_get_contents($URL);
$DOM = new DOMDocument();
$DOM->loadHTML($HTML);
$Links = $DOM->getElementsByTagName("a");
foreach ($Links as $Link){
echo "{$Link->getAttribute('href')}\n";
}
$HTML = file_get_contents($URL);
$DOM = new DOMDocument();
$DOM->loadHTML($HTML);
$Links = $DOM->getElementsByTagName("a");
foreach ($Links as $Link){
echo "{$Link->getAttribute('href')}\n";
}
$handle = fopen("http://www.mg.net.ua/prices.php", "r");
но возникла проблемма следующего характера при открытии страницы выдаються следующие ошибки
Warning: php_network_getaddresses: gethostbyname failed in C:\server\www\2.php on line 9
Warning: fopen("http://www.mg.net.ua/prices.php", "r") - No error in C:\server\www\2.php on line 9
подскажите в чем может быть проблемма, в пхп ини разрешено открытие файлов по сети allow_url_fopen = On
Цитата:
А скрипт у тебя где выполняется? На твоем компе? :p
Если да, то тебе сначала нужно запросить эту страницу по HTTP, потом сохранить и потом только открывать как локальный файл. Если скрипт выполняется на том же сервере, где и находятся файлы страниц, тогда открывай оттуда с его локальными путями...
ЗЫ. Да и еще. А ты уверен, что твой index.html или еще что-то подобное не генерится автоматически? Может быть такого файла вообще нет? Да и что это за такое открытие файлов по сети, я честно говоря не знаю... Как оно работает, для каких протоколов?
file_get_contents()
e1vin да файл генериться, и мне нужно из этого файла инфу получить
Я все-таки настаиваю на своем: а уверен ли ты, что можно прочитать исполняемый файл по сети? У тебя же страница генерируется скриптом! Скрипт ты не прочитаешь - прав нету, а читать страницу - это же вообще какие-то странные взаимодействия... Ты уверен, что PHP предоставляет подобный инструментарий, который инкапсулирует обмен данными по HTTP и предоставляет обычный интерфейс файловой системы?
Напишу для тех у кого проблемы со зрением
Пробовал через file_get_contents, написал такой код
$URL = "http://dn.kiev.ua/events/world/tkan_10.html";
$HTML = file_get_contents($URL);
echo $HTML;
запускаю скрипт, и он выводит пустую страницу, хотя когда старница находиться на стороне машины где находиться апачь, ту страницу он видит нормально
В принципе после переустановки php(замена на более новую версию), такойже результат получаеться и у функции fopen +fread
использую
apache_2.0.50+php-5.2.0
А вы уверены что файрволл не режет внешние соединения?
у меня на серчере нету фаервола, так а что фаер может сделать если у него на php.exe... и файлы нужные апачу стоит полное разрешение
Цитата:
Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция "fopen wrappers". Смотрите более подробную информацию об определении имени файла в описании функции fopen(), а также список поддерживаемых протоколов URL в Прил. M.
Проверяйте параметры соединения. Проблема не в РНР а в настройках вашего сервера.
Цитата: e1vin
Я все-таки настаиваю на своем: а уверен ли ты, что можно прочитать исполняемый файл по сети? У тебя же страница генерируется скриптом!
и что? ) результат выполнения скрипта ты всё равно получишь =)
Цитата: e1vin
Скрипт ты не прочитаешь - прав нету, а читать страницу - это же вообще какие-то странные взаимодействия...
в каком смысле странные???????? :eek:
Цитата: e1vin
Ты уверен, что PHP предоставляет подобный инструментарий, который инкапсулирует обмен данными по HTTP и предоставляет обычный интерфейс файловой системы?
я уверен ))) но насчет того, что полный функционал, скажем по HTTP, не уверен. читай fopen мануал :)
у меня на серчере в конв вайле прописано allow_url_fopen = On
но ни через функцию fopen ни через file_get_contents файл в интеренте не открываеться
Велика вероятность того, что сервант просто ничего не даёт, т.к. полагает, что запрос идёт не от браузера. Обычная вещь против воровства контента.
Код:
<?
error_reporting(E_ALL);
$res = file_get_contents('http://www.yandex.ru');
var_dump($res);
?>
error_reporting(E_ALL);
$res = file_get_contents('http://www.yandex.ru');
var_dump($res);
?>
bool(false)
Цитата: s-haman
Вот всё что выдает
bool(false)
bool(false)
Что-то режет...
А fopen\fread и file() тоже ничего не возвращают?
Какая ОС?
file из интернет ресурса возвращяет пустой массив(я пробовал выводить любой элемент массива)выводит пустую страницу, в локальном ресурсе выводит тоже пустую
RussianSpy в данный момент Win XP Home
Дома попробуй на Win XP Pro
Или что-нибудь вроде Kaspersky Anti-Hacker...
фаервола ненашол нашол брандмауер, он уже давно отключен
Цитата: s-haman
фаервола ненашол нашол брандмауер, он уже давно отключен
файрволл и брандмауэр одно и то же
Больше у меня идей нет... Качай ХАМРР и ставь его... Может поможет
apachefriends.org
также я пробовал через fgets, мне сказали что fread предназначен для дв,оичного чтения, ну, и ре,шил попробовать stream_get_line, результат один и тотже, тоесть с локальной машины данные читаються, а с сети или интернета данные не, могут быть считаны.