-
Вебмастеру
(
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($host, 80, $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($filePointer, 1);
}
while ( !preg_match('/\\r\\n\\r\\n$/', $responseHeader) );
if (!strstr($responseHeader, "Transfer-Encoding: chunked")) {
while (!feof($filePointer)) {
$responseContent.= fgets($filePointer, 128);
}
}
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");
|
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".
|
заголовок темы поменяй на более соответствующий содержанию - может больше толковых советов напишут ;)
|
SliderVM |
11-05-2008 12:10 799467 |
Название темы правильное:) "ufacars.myminicity.com" это только один из многих сайтов!
|
приведённый код парсит http, а html он извлекает (иногда ;) )
|
SliderVM |
11-05-2008 15:18 799578 |
Ну а как сделать что бы извлечь код HTML?
|
SliderVM, обрати внимание на мой пост и посуди - цикл заканчивается, когда получены все заголовки, т.о. контент не включается... (при условии, что регулярка корректно работает, в чем я не уверен)....
|
SliderVM |
11-05-2008 19:33 799747 |
Цитата:
Цитата Sham
SliderVM, обрати внимание на мой пост и посуди - цикл заканчивается, когда получены все заголовки, т.о. контент не включается... (при условии, что регулярка корректно работает, в чем я не уверен).... »
|
Контент выдается вот эта надпись "Please wait a few moments..." но почему ОНА???
|
PHP код:
$requestHeader.= "Content-Type: application/x-www-form-urlencoded\r\n";
А зачем этот заголовок отсылается? afaik он только для POST-данных....
|
SliderVM |
11-05-2008 20:41 799817 |
Цитата:
Цитата Sham
А зачем этот заголовок отсылается? afaik он только для POST-данных.... »
|
Я же говорю скрипт не я писал, многое в нем не понимаю :(
Поэтому и обратился сюда!
|
Цитата:
Цитата SliderVM
"Please wait a few moments..." »
|
это ж надо тот скрипт смотреть, чего он выдает....
а упомянутый мной хедер таки лучше убрать (строку закомментировать)...
|
SliderVM |
12-05-2008 11:25 800210 |
Цитата:
Цитата Sham
это ж надо тот скрипт смотреть, чего он выдает.... »
|
Если Регетом качать то сохраняется то что надо, а скриптом не как :(
|
Время: 09:44.
© OSzone.net 2001-