Простенький парсер HTML(сайта). Требуется помощь!

Статус
В этой теме нельзя размещать новые ответы.

KPACHODAP

DELETED
Регистрация
21 Дек 2009
Сообщения
675
Реакции
274
Народ вообщем есть сайт Для просмотра ссылки Войди или Зарегистрируйся

Пример:

Для просмотра ссылки Войди или Зарегистрируйся

Нужно написать PHP парсер чтобы выдерал такие вещи как:

1. Название апарата - Fujifilm FinePix S9100 digital camera specifications
2. Max resolution - 3488 x 2616
3. Low resolution - 2592 x 1944, 2048 x 1536, 1600 x 1200, 640 x 480
4. Aperture range - F2.8 - F4.9
5. Dimensions - 128 x 93 x 129 mm (5 x 3.7 x 5.1 in)
и.т.д могу уже аналогично по коду посмотреть и поправить сам!

Чтобы результат выводило 1-таблица 2-подряд

Пример "Low resolution - 2592 x 1944, 2048 x 1536, 1600 x 1200, 640 x 480 + Aperture range - F2.8 - F4.9 + и.т.д."


Как я понял это не сложно написать или хотябы дать идею, просьба давать предложения в готовом коде. За ранее спасибо!
 
Это предложение заработать?
 
Если нужно инфу с сайта выдрать, то лучше закажи кому нибудь. Если самому не осилить (а судя по посту, я это предпологаю). Просто под каждый сайт нужно обычно индивидуально скрипт писать.
 
Если нужно инфу с сайта выдрать, то лучше закажи кому нибудь. Если самому не осилить (а судя по посту, я это предпологаю). Просто под каждый сайт нужно обычно индивидуально скрипт писать.


Может я не правильно задал, вопрос как хотябы одну строчку выдрать дальше я сам смогу , мне нужен парсер обычный, которой бы как на яндексе парсил, только я не могу найти обычного парсера, без замут в коде!

Жду предложений - код!!! :tcl:
 
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;
}

Вот вам простенькая функция получения содержимого удаленной страницы.
В функции два аргумента - это хост и гет-запрос.
Для вот этой страницы Для просмотра ссылки Войди или Зарегистрируйся хостом будет Для просмотра ссылки Войди или Зарегистрируйся а гет-запросом соотв. /reviews/specs/Fujifilm/fuji_finepixs9100.asp
А полученный контент парсите прег_матчем как вам вздумется :)
 
Лови кусок кода с регулярками под твой сайт.
Сначала получи в $data страницу с сайта с помошью функции в посте Nafania.
Код:
if (preg_match_all('/<tr>\r\n<td class="tdlabelsimpsm" nowrap>(.*)<\/td>\r\n<td class="tdcontentsm">(.*)<\/td>/', $data, $res_array)) {
        print "<pre>\n";
          var_dump($res_array);
        print "</pre>\n";
} else {
  echo "no result";
}
Потом с $res_array можешь все что угодно делать.
Удачи :)
 
Для просмотра ссылки Войди или Зарегистрируйся, Для просмотра ссылки Войди или Зарегистрируйся Спасибо Вам, а не могли бы вы в сборе написать полный код и как делать запрос на парсинг. Просто я новичок с кодом, и мне бы Выша помощь в написании полного кода, хотябы 3 характеристики, чтобы уже в коде был завязан массив -
Пример:
Also known as: Fujifilmn FinePix S9600
Aperture range: F2.8 - F4.9
Compressed format: JPEG (EXIF 2.2)


А также как метод гет вызвать? За ранее ОГРОМНОЕ СПАСИБО!!!
 
PHP:
<?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);
                }
if (preg_match_all('/<tr>\r\n<td class="tdlabelsimpsm" nowrap>(.*)<\/td>\r\n<td class="tdcontentsm">(.*)<\/td>/', $data, $res_array)) {
        print "<pre>\n";
          var_dump($res_array);
        print "</pre>\n";
} else {
  echo "no result";
}
                $responseContent.= $responseContentChunk;
                fgets($filePointer);
        }

}
return $responseContent;
} 

$host = "dpreview.com";
$get = "/reviews/specs/Fujifilm/fuji_finepixs9100.asp";
$data = get_content($host, $get);
if (preg_match_all('/&nbsp;(.*)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/i', $data, $res_array)) {
        print "<pre>\n";
          var_dump($res_array);
        print "</pre>\n";
} else {
  echo "no result";
}
?>

Выдает ошибку: Fatal error: Maximum execution time of 30 seconds exceeded in P:\home\test1.ru\www\newsimport\kk.php on line 25


пробывал выставлять в пхп.ини
max_execution_time = 300 ; Maximum execution time of each script, in seconds

не помогло, жду предложений!
 
Выдает ошибку: Fatal error: Maximum execution time of 30 seconds exceeded in P:\home\test1.ru\www\newsimport\kk.php on line 25


пробывал выставлять в пхп.ини
max_execution_time = 300 ; Maximum execution time of each script, in seconds

не помогло, жду предложений!
Какую-то чушь наваяли. Я вам советую скачать несколько учебников по PHP и подучиться, а потом просить совета, ибо за вас никто ничего писать не будет (точней будут, но только в случае оплаты труда).
ЗЫ после ковыряния php.ini надо рестартить апач. Используйте set_time_limit();
 
Для просмотра ссылки Войди или Зарегистрируйся, я не полный нуб. И немного соображаю и рестарт делал. Также я прошу тех людей которые готовы помочь с ерундой. Если нет желания можешь вообще не писать!

Добавлено через 11 минут
PHP:
<pre>
<?php
    set_time_limit(0);
    $_file_for_parsing = "http://www.dpreview.com/reviews/specs/Fujifilm/fuji_finepixs9100.asp";
    $_save_urls_to = "urls.txt";
    
    $fp = fopen($_save_urls_to, "w+");
    $_anchors_pattern = "/&nbsp;(.*)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/i";
    $_doc = strip_tags(file_get_contents($_file_for_parsing), "<a>");
        
    if (preg_match_all($_anchors_pattern, $_doc, $res_array)) {
        $n = count($res_array[1]);
        for ($i=0;$i<$n;$i++) {
            $link = $res_array[1][$i];
            fwrite($fp, $link . "\n", 4096);
            //print $link . "\n";
            echo $res_array[1][$i];
        }
    }

    fclose($fp);
    
?>
</pre>

вот есть код он все вытягивает. Но как забить это все в таблицу чтобы характеристика соответствовала значению. За ранее спасибо! :ah:
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху