Показать полную графическую версию : Скрипт для скачивания сайта
Plutonium 239
15-10-2006, 23:39
Всем здравствуйте!
Мне нужно сделать PHP скрипт который бы заходил на сайт вводил логин и пароль, используя форму для поиска осуществлял поиск и скачивал бы результаты поиска к себе.
Вот только даже не знаю с чего начать. Как сделать что-то вроде имитации захода пользователя на сайт?
VeshchiyOleg
16-10-2006, 01:16
$handle = fopen ("http://www..........", "r");
while (!feof ($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer; # вот тут вместо вывода надо смотреть, что выводится и искать, что надо
}
fclose ($handle);
vadimiron
16-10-2006, 01:36
Plutonium 239
Надо симулировать браузер HTTP запросами.
Смотрим в сторону curl функций. Либо пишем свои классы для составления и отправки ХТТП запросов
Plutonium 239
16-10-2006, 13:48
Смотрим в сторону curl функций.
Я посмотрел, только ничего не понял:( может есть какое-нибудь подробное руководство с примерами?
curl как я понял может использовать кукис для авторизации на сайте, вот это было бы как раз то что нужно.
А еще нужно вытащить из полученного HTML документа информацию, HTML вида
<tr><td class="date">14.10.06 16.00</td></tr>
<tr><td class="title">Заголовок</td></tr>
<tr><td class="text">Текст.....</td></tr>
и т.д.
Из него нужно получить массив типа: дата, заголовок, текст и т.д.
Пробовал регулярным выражением <td class="date">[[:print:]]</td> но это неработатет, и другие тоже не работают:( они хоть русские буквы вообще понимают?
И еще, на сайте кодировка UTF-8 а у меня какая-то другая, windows по всей видимости, и когда php скрипт этот файл открывае то там белеберда всякая, что делать?
А еще нужно вытащить из полученного HTML документа информацию, HTML вида
<tr><td class="date">14.10.06 16.00</td></tr>
<tr><td class="title">Заголовок</td></tr>
<tr><td class="text">Текст.....</td></tr>
Регулярные выражения:
/class=\"date\">(.*?)<\/td>/
/class=\"title\">(.*?)<\/td>/
/class=\"text\">(.*?)<\/td>/
Plutonium 239
18-10-2006, 19:37
Вот такой код
$url = "search.phtml?s_ty=All&s_i=F&s_l=M&s_f=18&s_t=40&s_p=checked&s_c=3159_4528_4549&s_w=checked"
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_COOKIE, $cookies);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
В результате браузер выдает белиберду, в адресной строке вместо значков & какие-то amp;
что это за amp такие, откуда они беруться и как от них избавиться?
В результате браузер выдает белиберду, в адресной строке вместо значков & какие-то amp;
что это за amp такие, откуда они беруться и как от них избавиться?
мой интерпретатор PHP выдает ошибку, когда в начале стоит вот такое определение переменной
$url = "search.phtml?s_ty=All&s_i=F&s_l=M&s_f=18&s_t=40&s_p=checked&s_c=3159_4528_4549&s_w=checked"
Закройте строку точкой с запятой.
В остальном этот код работает вроде бы так как и должен.
Перед неалфавитными символами рекомендую использовать слэш. Слэш означает что этот символ будет пониматься так как он написан: \& \? \" \' \. \/ \\
Plutonium 239
21-10-2006, 09:44
Все нормально страничка скачатвается, разбирается на ссылки, но вот тольок я сталкнулся с такой проблемой, когда перехожу по ссылке просят ввсести код с картинки вместо нужной странички.
Есть ли какой-нибудь способ это обойти?
vadimiron
21-10-2006, 14:33
Plutonium 239
Нет, почти нет. Если программисты там сами не допустили какой нибудь оплошности в виде передачи этого номера по GET, что сегодня уже почти не происходит.
А парсинг подобной картинки и попытки вычитать оттуда номер не увенчаются успехом, или будет длиться очень долго и с неточностьями
Plutonium 239
23-10-2006, 17:04
А вот еще такой вопрос, можно ли сделать так, чтобы скрипт скаченные странички архивировал и отправлял на заданный email? Это вообще возможно, если да, то как?
И еще вопрос, чтобы заменить в скаченном файле все ссылки с http://..../файл.htm на файл.htm достаточно просто натравить на него регулярные выражения?
И кстати, где можно почитать про PCRE регулярные выражения в PHP мануал я уже прочитал, хотелось бы более развернуто и доступно:)
Prisoner
23-10-2006, 18:01
1) скрипт скаченные странички архивировал (http://www.phpconcept.net/pclzip/index.en.php)
2) отправлял на заданный email (http://ru.php.net/manual/ru/ref.mail.php)
3) развернуто и доступно (http://www.regularexpressions.info/)
Примерно так :).
Plutonium 239
23-10-2006, 19:10
Prisoner
скрипт скаченные странички архивировал
Я так понял, это библиотека которую надо компилировать с php, а у меня такой возможности нет:(
отправлял на заданный email
не очень понял:unsure: буду завтра разбираться:)
развернуто и доступно
Вот только я английский не в совершенстве знаю:( к сожалению
Может какаю книжка хорошая есть?
А можно вообще книги в интернет магазинах покупать? там не кидают?
Все нормально страничка скачатвается, разбирается на ссылки, но вот тольок я сталкнулся с такой проблемой, когда перехожу по ссылке просят ввсести код с картинки вместо нужной странички.
Есть ли какой-нибудь способ это обойти?
написать собственный анализатор картинки. это очень сложно для непрофессионала
И кстати, где можно почитать про PCRE регулярные выражения в PHP мануал я уже прочитал, хотелось бы более развернуто и доступно
Хороший обзор регулярных выражений для новичков дается в книге Learning Perl (недавно была ссылка в разделе Программирование, в теме про perl). Несмотря на то, что эта книга рассматривает perl, описание регулярных выражений можно перенести на php.
вот еще такой вопрос, можно ли сделать так, чтобы скрипт скаченные странички архивировал и отправлял на заданный email?
1 часть задачи: натравить любой консольный архиватор на файлы/файл.
Например, system("rar a test.rar C:/perl/js")
Параметры rar
a - упаковка
test.rar - как будет назван архив
С:/perl/php - то, что пакуется. думаю, что в пути следует избегать пробелов.
Rar.exe по умолчанию идет в составе Winrar, лучше поместить rar.exe в директорию со скриптом.
2 часть задачи: создание и отправка письма с аттачем. думаю, нужно юзать миме
<?php
require 'Mail.php';
require 'Mail/mime.php';
system("rar a test.rar C:/perl/js");
$to = '***@***';
$headers['From'] = '***@***';
$headers['Subject'] = 'Test!';
// create MIME object
$mime = new Mail_mime;
// add body parts
$file = 'test.rar';
$mime->addAttachment($file, 'application/octet-stream');
// get MIME formatted message headers and body
$headers = $mime->headers($headers);
$body = $mime->get();
Mail::send($to, $headers, $body);
//не работает указанное в книге
//$message =& Mail::factory('mail');
//$message->send($to, $headers, $body);
?>
для работы кода нужен локальный мейл сервер и mime.php http://download.pear.php.net/package/Mail_Mime-1.3.1.tgz
. Код работает, пакует и отправляет, но есть большой недостаток: при просмотре в Outlooke аттач не показывается нормально, выводится не раскодированный миме.
Короче. Вот такой рабочий на 90% код:
Аттач в Outlooke нормально показывается.
<?php
$eol="\r\n";
system("rar a test.rar C:/perl/js");
# File for Attachment
$letter="test.rar";
$f_name="test.rar"; // use relative path OR ELSE big headaches. $letter is my file for attaching.
$handle=fopen($f_name, 'rb');
$f_contents=fread($handle, filesize($f_name));
$f_contents=chunk_split(base64_encode($f_contents)); //Encode The Data For Transition using base64_encode();
$f_type=filetype($f_name);
fclose($handle);
# To Email Address
$emailaddress="***@***";
# Message Subject
$emailsubject="Heres An Email with a rar".date("Y/m/d H:i:s");
# Message Body
# Common Headers
$headers .= 'From: Test <***@***>'.$eol;
$headers .= 'Reply-To: Test <***@***>'.$eol;
$headers .= 'Return-Path: Test <***@***>'.$eol; // these two to set reply address
$headers .= "Message-ID: <".$now." TheSystem@".$_SERVER['SERVER_NAME'].">".$eol;
$headers .= "X-Mailer: PHP v".phpversion().$eol; // These two to help avoid spam-filters
# Boundry for marking the split & Multitype Headers
$mime_boundary=md5(time());
$headers .= 'MIME-Version: 1.0'.$eol;
$headers .= "Content-Type: multipart/related; boundary=\"".$mime_boundary."\"".$eol;
$msg = "";
# Attachment
$msg .= "--".$mime_boundary.$eol;
$msg .= "Content-Type: application/octet-stream; name=\"".$letter."\"".$eol; // sometimes i have to send MS Word, use 'msword' instead of 'pdf'
$msg .= "Content-Transfer-Encoding: base64".$eol;
$msg .= "Content-Disposition: attachment; filename=\"".$letter."\"".$eol.$eol; // !! This line needs TWO end of lines !! IMPORTANT !!
$msg .= $f_contents.$eol.$eol;
# Setup for text OR html
$msg .= "Content-Type: multipart/alternative".$eol;
# Text Version
$msg .= "--".$mime_boundary.$eol;
$msg .= "Content-Type: text/plain; charset=iso-8859-1".$eol;
$msg .= "Content-Transfer-Encoding: 8bit".$eol;
$msg .= "This is a multi-part message in MIME format.".$eol;
$msg .= "If you are reading this, please update your email-reading-software.".$eol;
$msg .= "+ + Text Only Email + +".$eol.$eol;
# HTML Version
$msg .= "--".$mime_boundary.$eol;
$msg .= "Content-Type: text/html; charset=iso-8859-1".$eol;
$msg .= "Content-Transfer-Encoding: 8bit".$eol;
$msg .= $body.$eol.$eol;
# Finished
$msg .= "--".$mime_boundary."--".$eol.$eol; // finish with two eol's for better security. see Injection.
# SEND THE EMAIL
ini_set(sendmail_from,'***@***'); // the INI lines are to force the From Address to be used !
mail($emailaddress, $emailsubject, $msg, $headers);
ini_restore(sendmail_from);
?>
http://www.ilovejackdaniels.com/regular_expressions_cheat_sheet.png
http://phpclub.ru/detail/article/simple_regular
http://phpclub.ru/detail/article/regexp_1
http://phpclub.ru/detail/article/regexp_2
Для сжатия - http://ru2.php.net/manual/ru/ref.zlib.php - не подойдет?
Prisoner
24-10-2006, 12:39
Я так понял, это библиотека которую надо компилировать с php, а у меня такой возможности нет
Имхо, нет. Я юзал без перекомпиляции :).
Igor_I, zLib как раз и требует компиляции с php.
Plutonium 239
24-10-2006, 15:06
Prisoner
Имхо, нет. Я юзал без перекомпиляции
Просто сайт на хостинге, а там этоой библиотеки нет, и установить ее, я думаю, не дадут.
Igor_I
Спасибо, почитаю!
У меня была такая шпаргалка по CSS, только я не знал откуда она, а там их еще много:clapping:
mrcnnКороче. Вот такой рабочий на 90% код:
Аттач в Outlooke нормально показывается.
Спасибо, сейчас буду тестить:)
Prisoner
24-10-2006, 15:36
Plutonium 239, библиотека эта на php и по сути представляет собой набор php-файлов. Надо лишь аплоадить их на сервер и верно использовать.
Plutonium 239
24-10-2006, 17:33
Prisonerбиблиотека эта на php и по сути представляет собой набор php-файлов. Надо лишь аплоадить их на сервер и верно использовать.
А, ну тогда подойдет, буду тестить:)
написать собственный анализатор картинки. это очень сложно для непрофессионала
А такой скрипт готовый достать нельзя?
И во еще вопрос.
Есть php файл в котором в начале устанавливаются переменные вида:
$tr1[] = "текст";
$tr1[] = "другой текст";
....
$dp1[] = "еще текст";
.... и т.д.
Их очень много, и постоянно нужно добавлять еще несколько. Я вот решил их вынести в отдельный файл, что-то вроде xml (насколько я знаю, что такое xml, конечно:) )
Т.е. файл типа:
<param name="tr1">текст</param>
...
<param name="tr1">другой текст</param>
...
<param name="dp1">еще текст</param>
Сделал скрипт для преобразования, и вот подумал, а целесообразно ли это вообще?:unsure:
Может есть способ лучше? Нужно чтобы скрипт при работе все эти данные загружал в многомерный массив, а после окончания записывал обратно, т.е. чтобы можно было добавлять и удалать переменные. Что здесь лучше использовать, подскажите?
Prisoner
25-10-2006, 01:06
А такой скрипт готовый достать нельзя?
Не знаю на счет готовых скриптов, но поиск с применением ключевого слова CAPTCHA (это и есть картинка с буковками, точнее механизм частью которого есть картинка с буковками) может привести как к механизмам генерирования CAPTCHA, так и их распознования. Статей довольно много.
Может есть способ лучше?
Да, в данном случае, пожалуй, проще будет использовать file() (http://ru2.php.net/manual/ru/function.file.php).
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.