Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Взятие информации с чужого сайта
 
 автор: sata   (07.04.2005 в 09:45)   письмо автору
 
 

Есть сайт с каталогом автомашин не auto.ru этот то каталог я и хочу поместить у себя. Хозяину сайта отнюдь не станет худа от рекламы товара.
Вот я и думаю каким макаром это всё осуществить. Мож у кого есть идеи или сталкивался кто с этим или знает где об этом можно почитать поделитесь пожалуйста. Заранее спасибо.

   
 
 автор: Shorr Kan   (07.04.2005 в 10:45)   письмо автору
 
   для: sata   (07.04.2005 в 09:45)
 

Сервер, на котором будет выведена информация с auto.ru - на нем в каком режиме директива allow_url_fopen?

А вообще - тут понадобятся функции:

file_get_contents
strpos
substr

Это основное. Дополнительно (так как захочется переделать внешний вид выводимого):
str_replace
explode

Основная мысль такова - Нужно найти место, из переменной, содержимое которой получаем при помощи file_get_contents, с этого места можно все взять в другую переменную. Говоря проще:


$address="http://auto.ru";
$start="Камаз - самая маленькая машина, из когда-либо мной виденных...";
$site = file_get_contents($address,"r");
$a=substr($site,$start);


В этом случае, при print $a вы увидите сайт auto.ru, но только тот кусок, который начнется после содержимого в переменной $start. Тут уж будьте внимательны, что туда вводить.

Разумеется, при помощи strpos нужно найти позицию окончания блока, который вам нужен. Но это уже глубже. Поэксперементируйте с этими функциями.

Если allow_url_fopen отключена, то нужно чуть иным методом.

   
 
 автор: cheops   (07.04.2005 в 11:26)   письмо автору
 
   для: sata   (07.04.2005 в 09:45)
 

Посмотрите темы, а так же ссылки которые в них указаны
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3110
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3137
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3181
В них приводятся многочисленные примеры работы с регулярными выражениями, и получения информации с сайтов различной тематики: поисковых систем, каталогов, интернет игр и т.п.

   
 
 автор: sata   (07.04.2005 в 21:18)   письмо автору
 
   для: cheops   (07.04.2005 в 11:26)
 

Страница с которого идёт попытка дёрнуть инфу называется http://crashescars.com/rus/top. Там мне надо на свой сайт слить таблицу каталога.
У важаемый cheops ссылки которые вы дали очень интересны, но мне недоконца понятно как же среди страницы в которой много таблиц вырезать именно эту.
Правда есть одна особенность эта таблица идёт с параметром border="1" возможно как то можно использовать это как отличие от остальных таблиц.
Заранее спасибо. А если поможите благодарность моя не будет знать границ.

   
 
 автор: sata   (07.04.2005 в 22:05)   письмо автору
 
   для: sata   (07.04.2005 в 21:18)
 

Я так понял это тогда что то вроде этого получится ?

<?
$address
="http://crashescars.com/rus/top"
$start="<table  width="99%" cellpadding="0"  cellspacing="0" border="1">";
$close="</table>";
$site file_get_contents($address,"r");
$site_close strpos($close,"r"); 
$a=substr($site,$start,$close);
print 
$a
?>

   
 
 автор: cheops   (07.04.2005 в 22:16)   письмо автору
 
   для: sata   (07.04.2005 в 21:18)
 

Да нет это очень далеко... здесь нужно к стилям привязываться...
<?php 
 
// Устанавливаем не ограниченное время выполнения скрипта 
  
set_time_limit(0); 
  
$page file_get_contents("opr001Q5.htm"); 
    
$pattern "#<font color=green>&nbsp;([^<]+)<[^<]+<[^<]+<[^<]+<[^>]+>([^<]+)<br>[^<]+<strong>[^>]+>[^<]+<a href=\"([^\"]+)\">([^<]+)<[^<]+<[^<]+<[^<]+<[^>]+>([^<]+)<[^<]+<[^<]+<[^>]+>([^<]+)<[^<]+<[^<]+<[^>]+>([^<]+)<#iU";
  
preg_match_all($pattern,$page,$out,PREG_PATTERN_ORDER); 
  echo 
"<pre>";
  
print_r($out[1]); // Машины
  
print_r($out[2]); // Площадки
  
print_r($out[3]); // URL-лот
  
print_r($out[4]); // число-лот
  
print_r($out[5]); // VIN
  
print_r($out[6]); // Пробег
  
print_r($out[7]); // Тип повреждения
  
echo "</pre>";
?>

   
 
 автор: sata   (07.04.2005 в 22:34)   письмо автору
 
   для: cheops   (07.04.2005 в 22:16)
 

Я так понял вы залазили на сайт и смотрели а opr001Q5.htm это что тогда такое или это просто пример ?

   
 
 автор: cheops   (07.04.2005 в 22:39)   письмо автору
 
   для: sata   (07.04.2005 в 22:34)
 

А... его следует заменить на "http://crashescars.com/rus/top" - это я сохранил страницу на локальном диске - так отлаживать скрипт быстрее...

   
 
 автор: sata   (07.04.2005 в 22:44)   письмо автору
 
   для: cheops   (07.04.2005 в 22:39)
 

Посмотрел скрипт локально а как зделать так чтобы это всё выводилось не массивом а в таблице как на сайте, а смысл как дёрнуть теперь понял спасибо
И можно чуть подробнее рассказать об этой строке
$pattern = "#<font color=green>&nbsp;([^<]+)<[^<]+<[^<]+<[^<]+<[^>]+>([^<]+)<br>[^<]+<strong>[^>]+>[^<]+<a href=\"([^\"]+)\">([^<]+)<[^<]+<[^<]+<[^<]+<[^>]+>([^<]+)<[^<]+<[^<]+<[^>]+>([^<]+)<[^<]+<[^<]+<[^>]+>([^<]+)<#iU";

   
 
 автор: Shorr Kan   (08.04.2005 в 04:32)   письмо автору
 
   для: sata   (07.04.2005 в 22:44)
 

Мое предложение такое:


<?set_time_limit(0);
$address="http://crashescars.com/rus/top"
echo(
"<base href=".$address.">");
$start='border="1">'
$close="</table>"
$site file_get_contents($address,"r"); 
$start_pos strpos($site,$start);
$site substr($site,$start_pos+strlen($start)); 
$close_pos strpos($site,$close);
$site substr($site,$start,$close_pos+strlen($close));  
?><table><?print $site;?></table><?


Тут вы и стиль собственной таблички легко переделаете...

   
 
 автор: cheops   (08.04.2005 в 09:47)   письмо автору
 
   для: sata   (07.04.2005 в 22:44)
 

Теперь следует восстановить таблицу из массивов, примерно следующимо образом
<?php
  
echo "<table>";
  for(
$i 0$i count($out[1]); $i++)
  {
     echo 
"<tr><td>".$out[1][$i]."</td><td>".$out[2][$i]."</td></tr>";
     echo 
"<tr><td colspan=2><a href=".$out[3][$i].">".$out[4][$i]."</a></td></tr>";
     echo 
"<tr><td colspan=2>".$out[5][$i]."</td></tr>";
     echo 
"<tr><td colspan=2>".$out[6][$i]."</td></tr>";
     echo 
"<tr><td colspan=2>".$out[7][$i]."</td></tr>";
  }
  echo 
"</table>";
?>

Страшная строка $pattern, вызывающая оторопь является регулярным выражением (подробнее можно почитать по ссылке в конце поста). Ищет оно соответствие элементу
<font color=green>&nbsp; 2001 MERCEDES BENZ ML320</font><br>
                &nbsp;<strong>Площадка:</strong> SOMERVILLE<br>
                &nbsp;<strong>Лот:</strong> <a href="http://crashescars.com/rus/search/~mode=show1~id=08687293">08687293</a><br>
                &nbsp;<strong>VIN:</strong> 4JGAB54E71A<br>
                &nbsp;<strong>Пробег:</strong> 65208 A<br>
                &nbsp;<strong>Тип повреждения:</strong> пожар в салоне<

При этом части, помещённые в круглые скобки сохраняются в массиве $out, который является двумерным массивом. $out[0] - это массив из кусков HTML соответствующих всему регулярному выражению, $out[1] - соответствует первым круглым скобкам, $out[2] - вторым и т.д. Маневрируя между границами тэгов < и > и сохраняя нужные нам куски при помощи круглых скобок, мы можем получить массивы данных из которых легко построить свою собственную таблицу, со своим собственным дизайном.

http://www.softtime.ru/group/id_group=3

   
 
 автор: sata   (08.04.2005 в 17:45)   письмо автору
 
   для: cheops   (08.04.2005 в 09:47)
 

Спасибо всем очень помогли

   
 
 автор: sata   (20.04.2005 в 11:37)   письмо автору
 
   для: sata   (08.04.2005 в 17:45)
 

Назрела тут аналогичная проблема но локально в всё нормально, а вот в инете не работает.
Есть страница https://www.iaai-bid.com/branchauctions.aspx?branch=722Защищёная SSL (поэтому мож и не пашет) на которой есть таблица вот она и не выдирается локально выдрал так

$address="https://www.iaai-bid.com/branchauctions.aspx?branch=722"; 
echo("<base href=".$address.">"); 
$start='id=auctionVehicles'; 
$close="</TABLE>"; 
$site = file_get_contents($address,"r"); 
$start_pos = strpos($site,$start); 
$site = substr($site,$start_pos+strlen($start)); 
$close_pos = strpos($site,$close); 
$site = substr($site,$start,$close_pos+strlen($close)); 
echo "<table ";
 print $site;
echo "</table>";

Да кстати там карттинки есть как их вырезать и на линк лота нажать могут только авторизованные пользователи как авторизоваться без ведома юзера и вытащить информацию данного лота со следующей страницы при условии что эти страницы постоянно обновляются (добавляются новые лоты убираются старые)
Идея примерно такая выдирается страница вставляется к себе ---> пользователь кликает на линк, происходит авторизация на сервере ----->открывается страница с описанием лота. Вот примерная схема
Вот если отвеите хотя бы на что то огромное спасибо.

   
 
 автор: cheops   (20.04.2005 в 12:45)   письмо автору
 
   для: sata   (20.04.2005 в 11:37)
 

Давайте постепенно начнём: поставьте проверку на длину $site
<?php
  
if(strlen($site) == 0) exit("Чёрт, ничего не загрузилось");
?>

Срабатывает она при загрузке с защищённой страницы? Кстати доступ к защищённой странице закрыт паролем или нет?

   
 
 автор: sata   (20.04.2005 в 14:38)   письмо автору
 
   для: cheops   (20.04.2005 в 12:45)
 

При проверке выводит строку Чёрт, ничего не загрузилось
Страница https://www.iaai-bid.com/branchauctions.aspx?branch=722
не защищена паролем

   
 
 автор: sata   (20.04.2005 в 17:47)   письмо автору
 
   для: sata   (20.04.2005 в 14:38)
 

как открыть на чтение файл по https php-функцией fopen() и ей подобным?

   
 
 автор: cheops   (20.04.2005 в 18:40)   письмо автору
 
   для: sata   (20.04.2005 в 14:38)
 

А другие файлы с обычных страниц грузятся? Дело в том, что ряд хостингов запрещают загрузку файлов с удалённых машин из PHP-скриптов...

   
 
 автор: sata   (20.04.2005 в 19:34)   письмо автору
 
   для: cheops   (20.04.2005 в 18:40)
 

Да всё работает вот тока с этим сайтом гемор при попытке выдрать таблицу с этой страници выдаёт

Notice: file_get_contents(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? in z:\home\autolegra.ru\www\catalog.php on line 183

Warning: file_get_contents(https://www.iaai-bid.com/branchauctions.aspx?branch=722): failed to open stream: No such file or directory in z:\home\autolegra.ru\www\catalog.php on line 183

С тех поддержкой поговорил сказали что https у них поддерживается в смысле возможна подгрузка но фиг знает мож друг друга непоняли

   
 
 автор: cheops   (20.04.2005 в 23:34)   письмо автору
 
   для: sata   (20.04.2005 в 19:34)
 

А вы тех.поддержке эти строчки отсылали - ведь PHP как раз на php.ini ругается, а у вас доступа к нему нет.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования