|
|
|
| Народ, кто силен в скриптах, помогите разобраться вот с такой задачей:
Есть url:
http://www.url.com/folder/number/
Загружается страница по этому адресу. Дальше необходимо в цикле задать загрузку страниц, например так:
<script type="text/javascript">
for (var i=0; i<300000; i++) {
var str1="http://www.url.com/folder/number/";
var str2 = i;
var str = str1+str2;
window.location.href=str;
}
</script>
|
Или что то в этом роде, дальше на этапе загрузки страницы, мы например знаем параметры объекта, который представляет из себя ссылку-картинку, например, у нее на каждой странице из цикла-перебора, заданы стабильно одни и теже параметры картинки-ссылки - height="50" width="30". Вот, но проблема в том, что этих страниц очень много, и необходимо сохранять ориентируясь по этим параметрам, сохранять эту картинку где-то на локальном компьютере, и при этом назвать файл именем, которое соответствовало бы альтернативному названию, ну у каждой этой ссылки картинки есть свой alt="бла-бла1", на следующей странице, такая же ссылка картинка с такой же шириной и высотой, но с параметром alt="бла-бла2" и т.д. Так вот, проблема состоит в организации скрипта, который бы выбирал бы на каждой странице из этого цикла эту картинку и сохранял бы ее на локальном компьютере с названием файла, название соответствовало бы alt-у соответственной картинки. Скажите такое возможно организовать??? | |
|
|
|
|
|
|
|
для: DBFS
(09.11.2007 в 20:45)
| | хотя бы подскажите как организовать сохранение картинок на компе, а дальше я попробую за сегодня сам разобраться... | |
|
|
|
|
|
|
|
для: DBFS
(09.11.2007 в 20:56)
| | В "чистом виде" JS ничего вам не сохранит на локальном компе! | |
|
|
|
|
|
|
|
для: sim5
(09.11.2007 в 21:29)
| | Нет, ну принципиальным это не является посредством чего решить задачу - JavaScript, РНР или чем еще... Вообще эта задача решима??? | |
|
|
|
|
|
|
|
для: DBFS
(09.11.2007 в 23:00)
| | Что так никто и не предложет??? | |
|
|
|
|
|
|
|
для: DBFS
(09.11.2007 в 23:57)
| | VB, WSH, ActiveX или заглянуть в кеш браузера. "Сохранить: С:\TEMP..." - такого JS не делает, а РНР и подавно, можете предложить скачать и только. | |
|
|
|
|
|
|
|
для: sim5
(10.11.2007 в 06:35)
| | Почему? Если человек говорит, что безразлично, средствами JS или PHP это делать, можно предположить, что PHP на целевом компьютере установлен. А кеш браузера поможет только если сначала пройти по всем этим картинкам вручную. Тогда уж можно "сохранить рисунок как..." ) | |
|
|
|
|
|
|
|
для: Shiva
(10.11.2007 в 13:51)
| | Хоть на каком, хоть свой, хоть чужой - JS этого не сделает. А если предположить что автор на своем хочет сохранять, то от куда идея с JS? В РНР "взять и сохранить у себя" есть уже готовое, какие могут быть проблемы. | |
|
|
|
|
|
|
|
для: sim5
(10.11.2007 в 15:09)
| | Нет, в использовании РНР проблем нет, прямо хоть сейчас поставлю денвер и локальный сервер готов. Покажите мне на коде как мне сохранить картинку, когда по циклу скрипт будет заставлять броузер заходить на эти адреса и "выковыривать" из каждой картинки-ссылки значение alt для того чтобы назначить сохраняемому фалу *.jpg название этого alt-a. Потому что на рассуждениях у всех получается так легко, а код почему то мне никто привести не может. | |
|
|
|
|
|
|
|
для: sim5
(10.11.2007 в 15:09)
| | sim5,
Я о JS ничего и не говорил.
Человеку нужен обычный граббер на регулярках, что вы усложняете?
<?php
$text = "<TR>
<TD STYLE='padding-right:15px' VALIGN='top' WIDTH='120' HEIGHT='190'>
<A HREF='http://www.kinopoisk.ru/level/13/people/15703/'><IMG ALT='Джуд Лоу (Jude Law)' SRC='http://www.kinopoisk.ru/images/actor/15703.jpg' WIDTH='120' HEIGHT='190' STYLE='border-left:10px solid #f60' BORDER='0'></A></TD>
<TD WIDTH='500' VALIGN='top'>
<TABLE CELLSPACING='0' CELLPADDING='0' ......... ";
preg_match("/(A HREF='http:\/\/www\.kinopoisk\.ru[^>]+><IMG +ALT=')([^']*)(' +SRC=')(http:\/\/www\.kinopoisk\.ru\/images\/actor\/[^']+)/i", $text, $arr);
$alt = $arr[2];
$url = $arr[4];
?>
|
Регулярное выражение постарался максимально конкретизировать т.к. не знаю, какие еще img есть на этой странице. | |
|
|
|
|
|
|
|
для: DBFS
(09.11.2007 в 20:45)
| | Конечно, в цыкле грузим пагу, из паги регуляркой выдергиваем ссылку на картинку и альт, далее качаем картинку, сохраняем ее под альтом и все. | |
|
|
|
|
|
|
|
для: Бамси
(10.11.2007 в 00:41)
| | *из паги регуляркой выдергиваем ссылку на картинку и альт*
А вы могли бы пожалуйста набросать код, очень нужно. Плиз! | |
|
|
|
|
|
|
|
для: DBFS
(10.11.2007 в 04:27)
| | Выложите HTML-код страницы. И отметьте комментариями нужную картинку. | |
|
|
|
|
|
|
|
для: Бамси
(10.11.2007 в 00:41)
| | Особенно с моментом про "выдергивание альта" можете наваять код??? | |
|
|
|
|
|
|
|
для: DBFS
(10.11.2007 в 04:49)
| | Через 15 минут уйду спать. Если до тех пор не выложите код, как я просил, ничего вам не наваяю). | |
|
|
|
|
|
|
|
для: Shiva
(10.11.2007 в 05:03)
| |
<TR>
<TD STYLE='padding-right:15px' VALIGN='top' WIDTH='120' HEIGHT='190'>
<A HREF='http://www.kinopoisk.ru/level/13/people/15703/'><IMG ALT='Джуд Лоу (Jude Law)' SRC='http://www.kinopoisk.ru/images/actor/15703.jpg' WIDTH='120' HEIGHT='190' STYLE='border-left:10px solid #f60' BORDER='0'></A></TD>
<TD WIDTH='500' VALIGN='top'>
<TABLE CELLSPACING='0' CELLPADDING='0' .........
.........
|
Вот таким вот макаром, к примеру, мне нужно вытащить все портреты киноактеров с ресурса, и сохраняя каждый, присваивать картинке *.jpg название файла, которое идет в alt. Как я уже говорил, вся проблема заключается в том, что их там очень много... :-( Поэтому приходится организовывать такой странный цикл... | |
|
|
|
|
|
|
|
для: DBFS
(10.11.2007 в 16:19)
| | Алё! Что никто не поможет?! | |
|
|
|
|
|
|
|
для: Shiva
(10.11.2007 в 05:03)
| | Па-ма-ги-те!!! | |
|
|
|
|
|
|
|
для: Бамси
(10.11.2007 в 00:41)
| | Что?.. Так никто и не покажет как "выдернуть" alt??? | |
|
|
|
|
|
|
|
для: DmitryBerkut
(13.11.2007 в 01:54)
| | Всё это осуществить средвствами JavaScrip необходимо или PHP тоже подойдёт? | |
|
|
|
|
|
|
|
для: cheops
(13.11.2007 в 11:50)
| | Подойдет и средствами JavaScript и php! | |
|
|
|
|
|
|
|
для: cheops
(13.11.2007 в 11:50)
| | Подойдет и РНР и JavaScript тоже подойдет, а вобще там и то и другое нужно! | |
|
|
|
|
|
|
|
для: DmitryBerkut
(13.11.2007 в 16:33)
| |
<head>
<script language="JavaScript">
function getAlt() {
alert(document.images[0].alt)
}
</script>
</head>
<body onload="getAlt()">
<img name="as" alt="Title image" src="image.ext">
</body>
|
Все изображения на странице, это массив images, обращаясь к которому можно получить свойства этих изображений. Получить их (в вашем случае), можно только после загрузки страницы, т.е. когда изображения загружены. К изображениям можно обращаться не по индексу массива, а по их именам или ID. Например, для примера можно записать так:
alert(document.images["as"].alt)
|
| |
|
|
|
|
|
|
|
для: sim5
(13.11.2007 в 17:41)
| | Спасибо большое, я считаю, что в основном Вы мне помогли, дальше я уже скомбинирую с РНР-скриптом и завершу полностью, т.е. сохранение файлов на лок машину с присвоением файлу имени-alt. | |
|
|
|
|
|
|
|
для: sim5
(13.11.2007 в 17:41)
| | Хорошо, а если ресурс чужой, и мне необходимо загрузить от туда большое количество картинок по этому же принципу, то что мне делать в этом случае? Использовать iframe? И как? | |
|
|
|
|
|
|
|
для: DmitryBerkut
(13.11.2007 в 19:56)
| | Я может чего-то не понимаю из того чего вы хотите, но в JS нет способов записать что-то на диск. Это возможно сделать только, если использовать WSH, ActiveX или VB. Если вы сами себе хотите записать, это еще можно, но вот стороннему клиенту вы этого сделать не сможете, у него все эти "прелести" могут быть отключены.
Если для себя, то лучше тогда через локальный сервер и РНР. Но собственно это можно сделать чисто браузером. | |
|
|
|
|
|
|
|
для: sim5
(14.11.2007 в 11:20)
| | Ну дык все правильно! используя php-скрипт и все его "прелести", на которые он способен, на локальном компьютере, который взят как apach-сервер, с установленным на нем Денвером. Но только вот не "стороннему клиенту", а себе, т.е. - мне. Я хочу посредством совмещения всех возможностей php и JavaScript у себя на локальном компьютере собрать всю библиотеку картинок, которая находится на дугом ресурсе и принадлежит "другому дяде/мальчику", но он, в свою очередь, не против того, я думаю)), чтобы у него скопировали все портреты киноактёров, которые он собрал в своей коллекции. Понимаете? | |
|
|
|
|
|
|
|
для: DmitryBerkut
(14.11.2007 в 15:08)
| | Понимаю, но "чистым" JS вы этого не сделаете, так что ищите и изучайте WSH, например, вот вкупе с JS он это сможет сделать. Либо в РНР регуляркой вытаскивать alt и РНР же записывать файлы.
Но вообще есть программы, которые могут сканируют в сети то, что вас интересует, и сохранять это на компьютере, зачем все городить. | |
|
|
|
|
|
|
|
для: sim5
(14.11.2007 в 11:20)
| | В принципе, есть такая "шняга", как файл *.HТА, и с помощью iframe можно получить доступ к содержимому документа с досье на каждого актера, но вот вопрос в том, как совместить этоти "прелести" php-скрипта с самим *.НТА файлом, для копирования на локалку этих картинок. В кэш броузера можно попробовать, на мне кажется что это не реально: "выцепить" из кэша именно ту картинку, которая нам необходима. | |
|
|
|
|
|
|
|
для: DmitryBerkut
(14.11.2007 в 15:16)
| | Никак. НТА это для локального клиента, грубо говоря, можете переименовать любой html в hta, хоть сейчас, будут некоторые сложности, но собственно вы сможете увидеть различия - это уже будет практически самостоятельное приложение, достаточно взгялянуть на окно открытого файла. | |
|
|
|
|
|
|
|
для: sim5
(14.11.2007 в 15:23)
| | Граждане, вы о чем? Человеку нужно просто скопировать с сайта базу фоток с названиями. На свой комп, куда он готов поставить PHP. При чем тут hta, прости господи.
Рабочий код выложил выше., т.к. не на то сообщение ответил, сорри...
ps. DmitryBerkut , вы и есть DBFS? ) | |
|
|
|
|
|
|
|
для: Shiva
(14.11.2007 в 15:29)
| | Да, DmitryBerkut это я, я же и DBFs. Сорри за двуличность, просто DmitryBerkut это мой постоянный ник, а в тот момент, когда срочно нужен был совет, я забыл пароль Дмитрия Беркута)). Бывает...
Так вернемся к проблеме, Shiva, прежде чем я воспользуюсь вашим кодом на локальной машине-сервере, скажите пожалуйста, можно ли в php-скрипте сделать так:
<?php
$text=?><iframe src="http://www.kinopoisk.ru/level/4/people/10079/"></frame>
<?php ;
?>
|
??? | |
|
|
|
|
|
|
|
для: DmitryBerkut
(14.11.2007 в 16:04)
| | А почему бы не так:
<?php
$text="<iframe src=\"http://www.kinopoisk.ru/level/4/people/10079/\"></frame>";
print $text;
?>
|
| |
|
|
|
|
|
|
|
для: DmitryBerkut
(14.11.2007 в 16:04)
| | Зачем? Вам Javascript и фреймы здесь вообще не понадобятся.
Просто получите код страницы функцией file_get_contents() и подставьте его в мой код на место переменной $text. | |
|
|
|
|
|
|
|
для: Shiva
(14.11.2007 в 16:19)
| | Сделал вот так:
<?php
for($i=100; $i<125; $i++) {
$text=file_get_contents('http://www.kinopoisk.ru/level/4/people/'.$i.'/index.php');
preg_match("/(A HREF='http:\/\/www\.kinopoisk\.ru[^>]+><IMG +ALT=')([^']*)(' +SRC=')(http:\/\/www\.kinopoisk\.ru\/images\/actor\/[^']+)/i", $text, $arr);
$alt = $arr[2];
$src = $arr[4];
echo "alt = ".$alt."; src = ".$src."\n";
}
?>
|
Выдает ошибку:
Notice: Undefined offset: 2 in z:\home\localhost\www\kinopoisk.php on line 9
[ убрать подсказку | никогда больше не показывать ]
Это предупреждение, вероятнее всего, возникает вследствие высокого уровня контроля ошибок в PHP, по умолчанию установленного в Денвере (E_ALL). Такой режим вывода ошибок является рекомендуемым и сильно помогает при отладке скриптов. Однако множество готовых скриптов требуют более низкого уровня ошибок.
Вы можете установить более слабый контроль ошибок одним из следующих способов:
* Впишите в скрипты строчку:
Error_Reporting(E_ALL & ~E_NOTICE);
Этот способ особенно удобен, если в скрипте есть один файл (конфигурационный), который подключается всеми остальными.
* Рекомендуемый способ. Создайте в директории со скриптом файл .htaccess следующего содержания:
php_value error_reporting 7
* Исправьте в /usr/local/php/php.ini значение error_reporting на E_ALL & ~E_NOTICE. Этот способ не является рекомендуемым и может привести к серьезным неудобствам при отладке!
[Денвер: показать возможную причину ошибки]
Notice: Undefined offset: 4 in z:\home\localhost\www\kinopoisk.php on line 10
alt = ; src =
Notice: Undefined offset: 2 in z:\home\localhost\www\kinopoisk.php on line 9
Notice: Undefined offset: 4 in z:\home\localhost\www\kinopoisk.php on line 10
alt = ; src =
Notice: Undefined offset: 2 in z:\home\localhost\www\kinopoisk.php on line 9
Notice: Undefined offset: 4 in z:\home\localhost\www\kinopoisk.php on line 10
alt = ; src =
Notice: Undefined offset: 2 in z:\home\localhost\www\kinopoisk.php on line 9
|
Что не так? | |
|
|
|
|
|
|
|
для: DmitryBerkut
(14.11.2007 в 21:42)
| | Народ, я уже даже закомментил основную часть, и сделал просто вывод file_get_contents файла страницы, остается чистый экран, нифига не выполняется, что это может значить?
<?php
$url_1="http://www.kinopoisk.ru/level/4/people/";
$url_2="/index.php";
/*
for($i=100; $i<125; $i++) {
$url=$url_1+$i+$url_2;
$text=file_get_contents('http://www.kinopoisk.ru/level/4/people/'.$i.'/index.php');
preg_match("/(A HREF='http:\/\/www\.kinopoisk\.ru[^>]+><IMG +ALT=')([^']*)(' +SRC=')(http:\/\/www\.kinopoisk\.ru\/images\/actor\/[^']+)/i", $text, $arr);
$alt = $arr[2];
$src = $arr[4];
echo "alt = ".$alt."; src = ".$src."\n";
} */
$text=file_get_contents('http://www.kinopoisk.ru/level/4/people/4561/index.php');
echo$text;
?>
|
| |
|
|
|
|
|
|
|
для: DmitryBerkut
(15.11.2007 в 13:48)
| | Проблемы вот какие:
1. Вы мне скинули неправильный HTML.
2. На каждой второй странице изображение отсутствует - это тоже нужно учесть в регулярке.
3. На сервере стоит защита, проверяющая заголовки, поэтому file_get_contents() не подойдет.
Набросал вот что:
<?php
for($i=100; $i<125; $i++) {
$text=getContent('level/4/people/'.$i.'/index.php');
preg_match("/(<img +alt=')([^']*)(' +src=')(\/images\/actor\/[^']+)/i", $text, $arr);
if(!$arr[4])
{
preg_match("/(<img +alt=')([^']*)(' +src=')(\/images\/image_none.gif)/i", $text, $arr);
}
$alt = $arr[2];
$src = $arr[4];
echo "alt = ".$alt."; src = ".$src."\n";
}
function getContent($queryStr)
{
$socket = fsockopen("www.kinopoisk.ru", 80);
$headers = "GET /$queryStr HTTP/1.0\r\n"
."Host: www.kinopoisk.ru\r\n"
."Referer: http://www.kinopoisk.ru/index.php\r\n"
."User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.51\r\n"
."Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n"
."Accept-Language: ru,en;q=0.9\r\n"
."Connection: Keep-Alive\r\n"
."Accept-Charset: windows-1251, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1\r\n\r\n";
fwrite($socket, $headers);
$buff = "";
while(!feof($socket))
{
$buff .= fread($socket, 1024);
}
fclose($socket);
list($headers, $body) = explode("\r\n\r\n", $buff, 2);
return $body;
}
?>
|
Но не радуйтесь. Это сработало на нескольких страницах, после чего мой ip автоматически попал в черный список, о чем мне сообщили и предложили для решения проблемы авторизоваться.
При такой защите функцию придется писать через curl с получением и отправкой cookie, а у меня сейчас на это времени нет. Если до тех пор вам не помогут, может, напишу на выходных.
ps. Вполне вероятно, что сервер анализирует просто "нечеловеческую" частоту обращений. Тогда решением может быть вызов, скажем, sleep(5) после каждой итерации цикла. Попробуйте. | |
|
|
|
|
|
|
|
для: Shiva
(15.11.2007 в 17:12)
| | ок, с вставкой sleep(5) в каждую итерацию попробую | |
|
|
|
|
|
|
|
для: Shiva
(15.11.2007 в 17:12)
| | Клас. Ваш совет с применением sleep(5) прошел на ура, только вот броузер выдает:
Fatal error: Maximum execution time of 30 seconds exceeded in z:\home\localhost\www\kinopoisk.php on line 16
|
Можно это как-нибудь убрать? Или я сейчас попробую запись в файл. А лучше подскажите, что бы это такого хитренького придумать, чтобы после каждой итерации выводился результат, а не происходило ожидание выполнения всего скрипта с учетом sleep(5) в конце цикла for. Может переменную $i передавать методом пост, предварительно увеличивая ее на единицу. Сейчас я попробую и сообщу результат. | |
|
|
|
|
|
|
|
для: DmitryBerkut
(15.11.2007 в 19:25)
| | Чё-то нифига. Ну хорошо! А почему оно не выводит каждый раз в каждой итерации значения alt и src? А дожидается полного завершения выполнения сценария, а не отдельной итерации цикла for?
<?php
Error_Reporting(E_ALL & ~E_NOTICE);
for($i=6141; $i<6161; $i++) {
$text=getContent('level/4/people/'.$i.'/index.php');
preg_match("/(<img +alt=')([^']*)(' +src=')(\/images\/actor\/[^']+)/i", $text, $arr);
if(!$arr[4])
{
preg_match("/(<img +alt=')([^']*)(' +src=')(\/images\/image_none.gif)/i", $text, $arr);
}
$alt = $arr[2];
$src = $arr[4];
echo "alt = ".$alt."; src = ".$src."\n";
echo $i."\n\n";
sleep(5); // иначе ведь повторится ситуация с вашим ip
}
function getContent($queryStr)
{
$socket = fsockopen("www.kinopoisk.ru", 80);
$headers = "GET /$queryStr HTTP/1.0\r\n"
."Host: www.kinopoisk.ru\r\n"
."Referer: http://www.kinopoisk.ru/index.php\r\n"
."User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.51\r\n"
."Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n"
."Accept-Language: ru,en;q=0.9\r\n"
."Connection: Keep-Alive\r\n"
."Accept-Charset: windows-1251, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1\r\n\r\n";
fwrite($socket, $headers);
$buff = "";
while(!feof($socket))
{
$buff .= fread($socket, 1024);
}
fclose($socket);
list($headers, $body) = explode("\r\n\r\n", $buff, 2);
return $body;
}
?>
|
| |
|
|
|
|
|
|
|
для: DmitryBerkut
(15.11.2007 в 19:44)
| | Результат выполнения в FireFox и в IE.6 один и тот же:
alt = Джим Керри (Jim Carrey); src = /images/actor/6141.jpg 6141 alt = Рене Зельвегер (Renée Zellweger); src = /images/actor/6142.jpg 6142 alt = Соо Браунли (Mongo Brownlee); src = /images/actor/6143.jpg 6143
Fatal error: Maximum execution time of 30 seconds exceeded in z:\home\localhost\www\kinopoisk.php on line 34 | |
|
|
|
|
|
|
|
для: DmitryBerkut
(15.11.2007 в 20:05)
| | поставьте в начале
ps. Было бы странно, если б сообщение о серверной ошибке было разным в разных браузерах ) | |
|
|
|
|
|
|
|
для: DmitryBerkut
(15.11.2007 в 20:05)
| | А чтобы выводить результат после каждого запроса, попробуйте перед вызовом sleep
написать
Это должно в принудительном порядке сбросить буфер. Скорее всего, сработает, но зависит от настроек. (Последнее, кстати, и к set_time_limit() относится). | |
|
|
|
|
|
|
|
для: DmitryBerkut
(15.11.2007 в 19:44)
| | И почему символ следующей "\n" строки не работает? | |
|
|
|
|
|
|
|
для: DmitryBerkut
(15.11.2007 в 20:16)
| | Что значит, не работает? Если откроете исходный код, то там перенос, веротно, есть (хотя если под windows, то нужно \r\n). Но на HTML странице, в общем случае, перенос строки отобразится только на месте тега <br /> (<br>) | |
|
|
|
|
|
|
|
для: Shiva
(15.11.2007 в 17:12)
| | Shiva, Вы говорили что необходимо писать через curl с получением и отправкой cookie. Если Вы очень заняты или Вам лень делать, то направте меня в нужное, ткскзть, русло, я попробую сам разобраться, может чё и напишу... | |
|
|
|
|
|
|
|
для: sim5
(13.11.2007 в 17:41)
| | А есть в JS контроль загруженности страницы. Ну т.е. страница загружена на 100%, например, объект возвращает true??? | |
|
|
|
|
|
|
|
для: DmitryBerkut
(15.11.2007 в 14:20)
| | Вобщем итог всей этой дискуссии и помощи Shiva, за что ему отдельная благодарность, это скрипт, который грабит картинки с ресурса и называет файлы картинок именами, соответствующими alt-у картинки без всяких JS и WSH:
<?php
Error_Reporting(E_ALL & ~E_NOTICE);
set_time_limit(0);
for($i=1; $i<1505487; $i++) {
$text=getContent('level/4/people/'.$i.'/index.php');
preg_match("/(<img +alt=')([^']*)(' +src=')(\/images\/actor\/[^']+)/i", $text, $arr);
if(!$arr[4])
{
preg_match("/(<img +alt=')([^']*)(' +src=')(\/images\/image_none.gif)/i", $text, $arr);
}
$alt = $arr[2];
$src = $arr[4];
//echo "alt = ".$alt."; src = ".$src;
//echo"\n";
$fp=fopen("actors/alt_src.txt","a");
fwrite($fp, $i.". ".$alt." * ".$src."\n");
fclose($fp);
if($src != '/images/image_none.gif') {
copy("http://www.kinopoisk.ru".$src, "Z:/home/localhost/www/actors/".$alt.".jpg");
echo $i.". Скопировано $alt <br>";
}
sleep(5);
}
function getContent($queryStr)
{
$socket = fsockopen("www.kinopoisk.ru", 80);
$headers = "GET /$queryStr HTTP/1.0\r\n"
."Host: www.kinopoisk.ru\r\n"
."Referer: http://www.kinopoisk.ru/index.php\r\n"
."User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.51\r\n"
."Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n"
."Accept-Language: ru,en;q=0.9\r\n"
."Connection: Keep-Alive\r\n"
."Accept-Charset: windows-1251, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1\r\n\r\n";
fwrite($socket, $headers);
$buff = "";
while(!feof($socket))
{
$buff .= fread($socket, 1024);
}
fclose($socket);
list($headers, $body) = explode("\r\n\r\n", $buff, 2);
return $body;
}
?>
|
Скрипт реально работает, сам проверил, и поставил на ночь на работе на закачьку всех картинок этого ресурса.
Только перед запуском скрипта необходимо создать подкаталог "actors" в той же директории, где расположен исполняемый файл-скрипт. | |
|
|
|
|
|
|
|
для: DmitryBerkut
(15.11.2007 в 22:01)
| | Чё-то после десятка таких пробных копирований картинок, скрипт перестал работать. Что могло произойти??? Хотя я поставил на-ночь, на работе, на выполнение, то штук 300 скопировало, но все же - при выполнении скрипта, сразу, не происходит нормального обращения к ресурсу, с чем это может быть связано??? | |
|
|
|
|
|
|
|
для: DmitryBerkut
(15.11.2007 в 22:01)
| | чё-то даже вот эта байда не помогает:
<?php
// функция разделения URL
function _parse_url ($path) {
preg_match ("~(.+)?:\/\/([ˆ\/]+)([ˆ\?]*)[\?]?([ˆ\/]*)~", $path, $arr);
if($arr[0]==''){ return array (path =>$path); }
return array (scheme => $arr[1], host => $arr[2], path => $arr[3], query => $arr[4]);
}
// функция вывода
function output_r ($path){
$arr = _parse_url($path);
$host = $arr[host];
$page = $arr[path];
$query = $arr[query];
if($query!=''){$page.='?'.$query;}
if($page==''){$page='/';}
$fp = @fsockopen($host, 80, &$errno, &$errstr, 30);
if(!$fp){ return implode('',@file($path)); }
$request = "GET $page HTTP/1.0\r\n";
$request .= "Host: $host\r\n";
$request .= "Accept: text/html, application/xml;q=0.9, */*;q=0.1\r\n";
$request .= "Accept-Charset: windows-1251, utf-8;q=0.6, *;q=0.1\r\n";
$request .= "Accept-Encoding: deflate, gzip, identity, *;q=0\r\n";
$request .= "Accept-Language: ru\r\n";
$request .= "Connection: close\r\n";
$request .= "Keep-Alive: 300\r\n";
$request .= "Expires: Thu, 01 Jan 1970 00:00:01 GMT\r\n";
$request .= "Cache-Control: no-store, no-cache, must-revalidate\r\n";
$request .= "Pragma: no-cache\r\n";
$request .= "Cookie: income=1\r\n";
$request .= "Referer: http://$host/\r\n";
$request .= "User-Agent: Mozilla/5.0 (compatible; MSIE 6.0; Windows 98)\r\n";
$request .= "\r\n";
fwrite ($fp,$request);
while ($line = fgets($fp, 1024)){
if (preg_match("~ˆ\r{0,1}\n$~i",$line)){$fest='yes';}
elseif($fest=='yes'){$out .= $line;}
}
return $out;
}
// Начинаем считывание
for($i=6141; $i<6145; $i++) {
$text=output_r('http://www.kinopoisk.ru/level/4/people/'.$i.'/index.php');
preg_match("/(<img +alt=')([^']*)(' +src=')(\/images\/actor\/[^']+)/i", $text, $arr);
if(!$arr[4])
{
preg_match("/(<img +alt=')([^']*)(' +src=')(\/images\/image_none.gif)/i", $text, $arr);
}
$alt = $arr[2];
$src = $arr[4];
//echo "alt = ".$alt."; src = ".$src;
//echo"\n";
$fp=fopen("actors/alt_src.txt","a");
fwrite($fp, $i.". ".$alt." * ".$src."\n");
fclose($fp);
if($src != '/images/image_none.gif') {
copy("http://www.kinopoisk.ru".$src, "Z:/home/localhost/www/actors/".$alt.".jpg");
echo $i.". Скопировано <b> $alt <\/b><br>";
}
sleep(5);
}
?>
|
| |
|
|
|
|
|
|
|
для: DmitryBerkut
(16.11.2007 в 18:17)
| | PicaLoader
PicDownloader
Right Picture Download Manager
webimage miner
Picture Pump
Internet Image Browser
Free Picture Finder
.....
И еще целая куча софта для этого. Мне кажется можно найти то, что удовлетворит ваши запросы. | |
|
|
|
|
|
|
|
для: sim5
(16.11.2007 в 18:34)
| | укажите мне то, что действительно удовлетворит мои запросы, а список софта я тоже могу накидать. Вы читали суть задачи, каким образом мне нужна закачка изображений? | |
|
|
|
|
|
|
|
для: DmitryBerkut
(16.11.2007 в 18:37)
| | Читал конечно, весь софт просмотреть не могу, но то что его полно и под всякие задачи, я не сомневаюсь. Я не искал изображения и не собирал картинки как вы это делаете, я предпочитаю покупать диски с изображеними очень высокого разрешения, а в сети ищу только то, чего нет у меня, и сохраняю под тем именем, какое мне нужно. Не верится мне, что нет того, что вам нужно, хотя бы исходя из того, что такая блестящая идея, как сохранение изображения под именами их alt, не вам первому в голову пришла.
Кстати alt ведь не обязательно может быть коротким, и не тем чего я бы хотел ожидать. | |
|
|
|
|
|
|
|
для: sim5
(16.11.2007 в 18:53)
| | Нет, Уважаемый, Вы не правы. На счет высокого изображения картинок - тут вобще, по-моему, высказывания не в тему. Поэтому проигнорирую. Что касается alt-та, как Вы выражаетсесь - "не обязательно короткого" - ну, не знаю, на сколько имя и фамилия кинозвезды может это позволить. Я определил границу итераций своего цикла, иными словами - количество киноактеров на ресурсе - 1505487 человек. Из этого полутора миллиона, я ниодного еще имени не видел, которое, как Вы говорите было бы, ну аж, слишком большим. Далее, на счет того что мне не первому пришла такая идея в голову, естественно, я здравомыслящий человек, и прекрасно понимаю что - не первому. И что дальше? Неужели вы считаете что я не обращался к поиску. Вы знаете, я очень ленивый человек, ленивый в том плане, что я лучше сделаю один раз так, как следует, и тщательно, чем буду много раз страдать всякого рода фигней, кпримеру, поиском! | |
|
|
|
|
|
|
|
для: DmitryBerkut
(16.11.2007 в 19:03)
| | Ну если вы нацелены только на актеров, может так и лучше. Я ведь не говорю что вы фигней занимаетесь, просто я всегда находил тот или иной софт мне необходимый, потому и предполагаю, что и ваш есть. | |
|
|
|
|
|
|
|
для: DmitryBerkut
(15.11.2007 в 22:01)
| | Shiva, спасайте ситуацию, блин, оно не хочет копировать. IP - забанили. Т.е. вручную зайдя, к примеру, скажем на вот этого актера: http://www.kinopoisk.ru/level/403/ оно пишет что доступ запрещен. В чем может быть проблема? Хотя со sleep(5) - скрипт реально работал, я пол вечера копировал. А потом вдруг бац!!!... | |
|
|
|
|
|
|
|
для: DmitryBerkut
(19.11.2007 в 16:04)
| | > Т.е. вручную зайдя, к примеру, скажем на вот этого актера: http://www.kinopoisk.ru/level/403/ оно пишет что доступ запрещен
Посмотрите на адрес внимательно. Какой это актер? У всех будет "доступ запрещен". | |
|
|
|
|
|
|
|
для: Unkind
(19.11.2007 в 16:30)
| | Блин, ну ребята!!! Ну что такое. Ну зачем флудить? Ну по сути высказывайтесь. Он уже придрался к адресу, ну например вот этот вот:http://www.kinopoisk.ru/level/4/people/6794/ | |
|
|
|
|
|
|
|
для: DmitryBerkut
(15.11.2007 в 22:01)
| | Вобщем народ! Скрипт пашет, но проблема: забанили ip-адрес. Как поступить? Надо по-зарез скачать эту базу "портретов")! | |
|
|
|
|