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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   HTML parser (http://forum.oszone.net/showthread.php?t=106588)

SliderVM 08-05-2008 23:54 798033

HTML parser
 
Вот код который у меня есть, но проблемма в том, что я не получаю целевую страницу... В чем моя ошибка подскажите :(

PHP код:

function get_content($host$get="/") {
$filePointer fsockopen($host80$errorNumber$errorString);
if (!
$filePointer)
{
    exit(
'Failed opening http socket connection: '.$errorString.' ('.$errorNumber.')<br/>\n');
}

$requestHeader "GET " $get "  HTTP/1.1\r\n";
$requestHeader.= "Host: ".$host."\r\n";
$requestHeader.= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3\r\n";
$requestHeader.= "Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n";
$requestHeader.= "Accept-Language: ru,en;q=0.5\r\n";
$requestHeader.= "Accept-Charset: windows-1251;q=0.7,*;q=0.7\r\n";
$requestHeader.= "Content-Type: application/x-www-form-urlencoded\r\n";
$requestHeader.= "Connection: close\r\n";
$requestHeader.= "Referer: \r\n\r\n";

fwrite($filePointer$requestHeader);

$responseHeader '';
$responseContent '';

do {
    
$responseHeader.= fread($filePointer1);
}
while ( !
preg_match('/\\r\\n\\r\\n$/'$responseHeader) );

if (!
strstr($responseHeader"Transfer-Encoding: chunked")) {
    while (!
feof($filePointer)) {
        
$responseContent.= fgets($filePointer128);
    }
}
else {
    while (
$chunk_length hexdec(fgets($filePointer))) {
        
$responseContentChunk '';
                
$read_length 0;
                while (
$read_length $chunk_length) {
                    
$responseContentChunk .= fread($filePointer$chunk_length $read_length);
                    
$read_length strlen($responseContentChunk);
                }

                
$responseContent.= $responseContentChunk;
                
fgets($filePointer);
        }

}
 return 
$responseContent;
}

echo 
get_content("ufacars.myminicity.com"); 


Sham 09-05-2008 00:10 798046

SliderVM, есть же теги [php][/php]

Цитата:

Цитата SliderVM
PHP код:

while ( !preg_match('/\\r\\n\\r\\n$/'$responseHeader) ); 


А зачем экраны дублированы?

bruder 09-05-2008 11:51 798219

все дело в бесконечном цикле

PHP код:

while ($read_length $chunk_length) {
$responseContentChunk .= fread($filePointer$chunk_length $read_length);
$read_length strlen($responseContentChunk);


там $read_length всегда 0. А я с soketами совсем незнаком. Неужели чтобы получить контент страницы надо так сложно? Прошу профи объяснить на пальцах этот метод, очень интересно

rus-4-ever 10-05-2008 13:10 798805

Может так лучше??? по крайней мере работает!!!

Тут файл записыватся в массив построчно

Цитата:

if (!($arr=file("http://yandex.ru","r"))) {die("извините, сервис временно недоступен");}

$j=0;

do
{
//Код...

$j++;
}
while ($j<count($arr));

SliderVM 11-05-2008 08:34 799385

yandex.ru и у меня получается скопировать... А вот к примеру "ufacars.myminicity.com" так не работает :( Цель у меня распарсить именно "ufacars.myminicity.com".

Busla 11-05-2008 12:04 799461

заголовок темы поменяй на более соответствующий содержанию - может больше толковых советов напишут ;)

SliderVM 11-05-2008 12:10 799467

Название темы правильное:) "ufacars.myminicity.com" это только один из многих сайтов!

Busla 11-05-2008 14:23 799546

приведённый код парсит http, а html он извлекает (иногда ;) )

SliderVM 11-05-2008 15:18 799578

Ну а как сделать что бы извлечь код HTML?

Sham 11-05-2008 19:24 799739

SliderVM, обрати внимание на мой пост и посуди - цикл заканчивается, когда получены все заголовки, т.о. контент не включается... (при условии, что регулярка корректно работает, в чем я не уверен)....

SliderVM 11-05-2008 19:33 799747

Цитата:

Цитата Sham
SliderVM, обрати внимание на мой пост и посуди - цикл заканчивается, когда получены все заголовки, т.о. контент не включается... (при условии, что регулярка корректно работает, в чем я не уверен).... »


Контент выдается вот эта надпись "Please wait a few moments..." но почему ОНА???

Sham 11-05-2008 19:49 799766

PHP код:

$requestHeader.= "Content-Type: application/x-www-form-urlencoded\r\n"

А зачем этот заголовок отсылается? afaik он только для POST-данных....

SliderVM 11-05-2008 20:41 799817

Цитата:

Цитата Sham
А зачем этот заголовок отсылается? afaik он только для POST-данных.... »

Я же говорю скрипт не я писал, многое в нем не понимаю :(

Поэтому и обратился сюда!

Sham 12-05-2008 03:37 800057

Цитата:

Цитата SliderVM
"Please wait a few moments..." »

это ж надо тот скрипт смотреть, чего он выдает....

а упомянутый мной хедер таки лучше убрать (строку закомментировать)...

SliderVM 12-05-2008 11:25 800210

Цитата:

Цитата Sham
это ж надо тот скрипт смотреть, чего он выдает.... »

Если Регетом качать то сохраняется то что надо, а скриптом не как :(


Время: 09:44.

Время: 09:44.
© OSzone.net 2001-