Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Скрипт для скачивания сайта (http://forum.oszone.net/showthread.php?t=72978)

Plutonium 239 15-10-2006 23:39 498264

Скрипт для скачивания сайта
 
Всем здравствуйте!
Мне нужно сделать PHP скрипт который бы заходил на сайт вводил логин и пароль, используя форму для поиска осуществлял поиск и скачивал бы результаты поиска к себе.
Вот только даже не знаю с чего начать. Как сделать что-то вроде имитации захода пользователя на сайт?

VeshchiyOleg 16-10-2006 01:16 498293

PHP код:

$handle fopen ("http://www..........""r");
while (!
feof ($handle)) {
    
$buffer fgets($handle4096);
    echo 
$buffer# вот тут вместо вывода надо смотреть, что выводится и искать, что надо
}
fclose ($handle); 


vadimiron 16-10-2006 01:36 498303

Plutonium 239
Надо симулировать браузер HTTP запросами.
Смотрим в сторону curl функций. Либо пишем свои классы для составления и отправки ХТТП запросов

Plutonium 239 16-10-2006 13:48 498493

Цитата:

Смотрим в сторону curl функций.
Я посмотрел, только ничего не понял:( может есть какое-нибудь подробное руководство с примерами?
curl как я понял может использовать кукис для авторизации на сайте, вот это было бы как раз то что нужно.
А еще нужно вытащить из полученного HTML документа информацию, 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>
и т.д.

Из него нужно получить массив типа: дата, заголовок, текст и т.д.
Пробовал регулярным выражением
HTML код:

<td class="date">[[:print:]]</td>
но это неработатет, и другие тоже не работают:( они хоть русские буквы вообще понимают?
И еще, на сайте кодировка UTF-8 а у меня какая-то другая, windows по всей видимости, и когда php скрипт этот файл открывае то там белеберда всякая, что делать?

mrcnn 16-10-2006 16:29 498587

Цитата:

А еще нужно вытащить из полученного 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 499722

Вот такой код
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"
$ch curl_init(); 
curl_setopt($chCURLOPT_URL$url); 
curl_setopt($chCURLOPT_FAILONERROR1); 
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
curl_setopt($chCURLOPT_TIMEOUT20);
curl_setopt($chCURLOPT_COOKIE$cookies); 
$result curl_exec($ch);
curl_close($ch);
echo 
$result

В результате браузер выдает белиберду, в адресной строке вместо значков & какие-то amp;
что это за amp такие, откуда они беруться и как от них избавиться?

mrcnn 19-10-2006 04:49 499858

Цитата:

В результате браузер выдает белиберду, в адресной строке вместо значков & какие-то 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 500909

Все нормально страничка скачатвается, разбирается на ссылки, но вот тольок я сталкнулся с такой проблемой, когда перехожу по ссылке просят ввсести код с картинки вместо нужной странички.
Есть ли какой-нибудь способ это обойти?

vadimiron 21-10-2006 14:33 501018

Plutonium 239
Нет, почти нет. Если программисты там сами не допустили какой нибудь оплошности в виде передачи этого номера по GET, что сегодня уже почти не происходит.
А парсинг подобной картинки и попытки вычитать оттуда номер не увенчаются успехом, или будет длиться очень долго и с неточностьями

Plutonium 239 23-10-2006 17:04 501664

А вот еще такой вопрос, можно ли сделать так, чтобы скрипт скаченные странички архивировал и отправлял на заданный email? Это вообще возможно, если да, то как?
И еще вопрос, чтобы заменить в скаченном файле все ссылки с http://..../файл.htm на файл.htm достаточно просто натравить на него регулярные выражения?
И кстати, где можно почитать про PCRE регулярные выражения в PHP мануал я уже прочитал, хотелось бы более развернуто и доступно:)

Prisoner 23-10-2006 18:01 501682

1) скрипт скаченные странички архивировал
2) отправлял на заданный email
3) развернуто и доступно

Примерно так :).

Plutonium 239 23-10-2006 19:10 501718

Prisoner
Цитата:

скрипт скаченные странички архивировал
Я так понял, это библиотека которую надо компилировать с php, а у меня такой возможности нет:(
Цитата:

отправлял на заданный email
не очень понял:unsure: буду завтра разбираться:)
Цитата:

развернуто и доступно
Вот только я английский не в совершенстве знаю:( к сожалению
Может какаю книжка хорошая есть?
А можно вообще книги в интернет магазинах покупать? там не кидают?

mrcnn 23-10-2006 20:22 501742

Цитата:

Все нормально страничка скачатвается, разбирается на ссылки, но вот тольок я сталкнулся с такой проблемой, когда перехожу по ссылке просят ввсести код с картинки вместо нужной странички.
Есть ли какой-нибудь способ это обойти?
написать собственный анализатор картинки. это очень сложно для непрофессионала

Цитата:

И кстати, где можно почитать про PCRE регулярные выражения в PHP мануал я уже прочитал, хотелось бы более развернуто и доступно
Хороший обзор регулярных выражений для новичков дается в книге Learning Perl (недавно была ссылка в разделе Программирование, в теме про perl). Несмотря на то, что эта книга рассматривает perl, описание регулярных выражений можно перенести на php.

Цитата:

вот еще такой вопрос, можно ли сделать так, чтобы скрипт скаченные странички архивировал и отправлял на заданный email?
1 часть задачи: натравить любой консольный архиватор на файлы/файл.
Например,
PHP код:

system("rar a test.rar C:/perl/js"

Параметры rar
a - упаковка
test.rar - как будет назван архив
С:/perl/php - то, что пакуется. думаю, что в пути следует избегать пробелов.
Rar.exe по умолчанию идет в составе Winrar, лучше поместить rar.exe в директорию со скриптом.

2 часть задачи: создание и отправка письма с аттачем. думаю, нужно юзать миме

PHP код:

<?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...Mime-1.3.1.tgz
. Код работает, пакует и отправляет, но есть большой недостаток: при просмотре в Outlooke аттач не показывается нормально, выводится не раскодированный миме.

mrcnn 23-10-2006 20:43 501745

Короче. Вот такой рабочий на 90% код:
Аттач в Outlooke нормально показывается.
PHP код:

<?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($handlefilesize($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); 
?>


Igor_I 23-10-2006 22:16 501789

http://www.ilovejackdaniels.com/regu...heat_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 502010

Цитата:

Цитата Plutonium 239
Я так понял, это библиотека которую надо компилировать с php, а у меня такой возможности нет

Имхо, нет. Я юзал без перекомпиляции :).
Igor_I, zLib как раз и требует компиляции с php.

Plutonium 239 24-10-2006 15:06 502079

Prisoner
Цитата:

Имхо, нет. Я юзал без перекомпиляции
Просто сайт на хостинге, а там этоой библиотеки нет, и установить ее, я думаю, не дадут.
Igor_I
Спасибо, почитаю!
У меня была такая шпаргалка по CSS, только я не знал откуда она, а там их еще много:clapping:
mrcnn
Цитата:

Короче. Вот такой рабочий на 90% код:
Аттач в Outlooke нормально показывается.

Спасибо, сейчас буду тестить:)

Prisoner 24-10-2006 15:36 502103

Plutonium 239, библиотека эта на php и по сути представляет собой набор php-файлов. Надо лишь аплоадить их на сервер и верно использовать.

Plutonium 239 24-10-2006 17:33 502162

Prisoner
Цитата:

библиотека эта на php и по сути представляет собой набор php-файлов. Надо лишь аплоадить их на сервер и верно использовать.
А, ну тогда подойдет, буду тестить:)
Цитата:

написать собственный анализатор картинки. это очень сложно для непрофессионала
А такой скрипт готовый достать нельзя?

И во еще вопрос.
Есть php файл в котором в начале устанавливаются переменные вида:
PHP код:

$tr1[] = "текст";
$tr1[] = "другой текст";
....
$dp1[] = "еще текст";
.... 
и т.д

Их очень много, и постоянно нужно добавлять еще несколько. Я вот решил их вынести в отдельный файл, что-то вроде xml (насколько я знаю, что такое xml, конечно:) )
Т.е. файл типа:
HTML код:

<param name="tr1">текст</param>
...
<param name="tr1">другой текст</param>
...
<param name="dp1">еще текст</param>

Сделал скрипт для преобразования, и вот подумал, а целесообразно ли это вообще?:unsure:
Может есть способ лучше? Нужно чтобы скрипт при работе все эти данные загружал в многомерный массив, а после окончания записывал обратно, т.е. чтобы можно было добавлять и удалать переменные. Что здесь лучше использовать, подскажите?

Prisoner 25-10-2006 01:06 502315

Цитата:

А такой скрипт готовый достать нельзя?
Не знаю на счет готовых скриптов, но поиск с применением ключевого слова CAPTCHA (это и есть картинка с буковками, точнее механизм частью которого есть картинка с буковками) может привести как к механизмам генерирования CAPTCHA, так и их распознования. Статей довольно много.
Цитата:

Может есть способ лучше?
Да, в данном случае, пожалуй, проще будет использовать file().

Plutonium 239 16-11-2006 16:34 512748

Подскажите где взять такой редактор как на форуме для ввода сообщения, нужно, чтобы в системе администрирования сайта вместо html кода можно было кнопочки нажимать и выделенный текст бы обрамлялся нужными тегами?


Время: 11:49.

Время: 11:49.
© OSzone.net 2001-