[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP Парсер
EvilDev
Всем привет!
Помогите плз разобраться вот в этих вопросах:
1. Если я с сайта нчинаю грабить всю инфу (например о товарах: наименование, номер, цена п пр.) то на это распространяется уголовная ответственность?
2. Написал парсер, тока всеравно меня он не устраивает...
Идея у него такая:
1) Получаем контент для марки
2) Далее смотрим, на той мы странице или нет, если мы ушли за пределы, то возврашаемся к п.1, но уже ведем поиск для другой марки
3) Если мы тут, то получаем информацию о всех товарах на данной странице и переходим на след. страницу.
Проблема в том, что он все не как не может сграбить. Я вот думаю, может скрипт перестает выполняться, так то код то правильный. Помогите плз, время оч. сина поджимает.

3. Если есть время, расскажите что нить еще полезное по граббингу

Код
<?
set_time_limit(0);  // чтоб успело дограбить всё
ignore_user_abort(); // грабить не смотря на ошибки клиента

// Удаляю для начала все содержимое таблиц

if(!mysql_query("DELETE FROM `".BASEPFX."brands`", $db) ||
  !mysql_query("DELETE FROM `".BASEPFX."brands_img`", $db))
{
$g_strPageData = $g_strPageData."<b>Не удалось почистить базы</b><br>";
}

// Получаем контент для первой марки

$result  = mysql_query("SELECT * FROM `".BASEPFX."words_brands` WHERE `eng` = 'ARMANI'", $db);
while($rowMSQL = mysql_fetch_row($result))
{
$iPageNum   = 1;

for($q = 0; true; ++$q)
{
 $iCurrentPageArea = ($iPageNum / 10) - ($iPageNum % 10 * 0.1);

 $strBrandContent = file_get_contents("http://xxxxxxxxxxx.xxxxx/?sub2=".$rowMSQL[1]."&page=$iPageNum&currentpagearea=".$iCurrentPageArea);

$iPids    = array(0 => 1000);

 // Достаем из него все, что нада
 // Сначала проверим, не перешли ли мы на несуществующую страницу
 preg_match_all("/color=red><B>([0-9]{1,4})/m", $strBrandContent, $arrBrandContent);

 if($iPageNum > $arrBrandContent[1][0])
 {
  $g_strPageData = $g_strPageData."<font class=\"pData\">Здесь кончили, идем дальше</font><br>";
  break;
 } else {
  $arrBrandContent = 0;

  // Достанем наши PID
  preg_match_all("/.+pid=([0-9]+)&/m", $strBrandContent, $arrBrandContent);

  // Пересобираем т.е. удаляем повторяющиеся
  for($i = 0; $i < sizeof($arrBrandContent[1]); ++$i)
   if($arrBrandContent[1][$i] != $arrBrandContent[1][$i-1])
    $iPids[$i] = $arrBrandContent[1][$i];

  $g_strPageData = $g_strPageData."<font class=\"pData\">Найдено: ".sizeof($iPids)." в ".$rowMSQL[1]." на странице $iPageNum</font><br>";

  // Переходим по ссылкам и собираем инфу
  for($i = 0; $i < sizeof($iPids); ++$i)
  {
   $strItemContent = file_get_contents("http://xxxxxx.xxxxx/?pid=".$iPids[$i]);
   $arrItemContent = 0;
   $strItem  = "";

   $strItemContent = trim(trim($strItemContent, "\r\n\t"));

   preg_match_all("/([a-zA-Z]20[0-9]{10})/m", $strItemContent, $arrItemContent);
   $strItem[0] = trim(trim($arrItemContent[1][0], "\r\n\t"));

   preg_match_all("/(pbpic.+\.jpg)/m", $strItemContent, $arrItemContent);

   // Скачиваем все картинки
   for($j = 0; $j < sizeof($arrItemContent[1]); ++$j)
   {
    $fname = "http://xxxxxx.xxxxx/".$arrItemContent[1][$j];

    if(!copy($fname, "data/img_brands/".strtolower(array_pop(explode("/", $fname)))))
     $g_strPageData = $g_strPageData."<b>Ошибка копирования изображения</b> $fname <br>";
    else {
     $strItem[1] = trim(trim($arrItemContent[1][$j], "\r\n\t"));
     if(!mysql_query("INSERT INTO `".BASEPFX."brands_img` (
         `itemno` ,
         `img` )
         VALUES ('".$strItem[0]."', '".strtolower(array_pop(explode("/", $fname)))."');", $db))
     {
      $g_strPageData = $g_strPageData."<font class=\"pRead\"><b>Не могу добавить изображение в базу</b> $fname </font><br>";
     }
    }
   }

   preg_match_all("/Categories.+\\n\s+(.+)\s+<\/TD>/m", $strItemContent, $arrItemContent);
   $strItem[2] = trim(trim($arrItemContent[1][0], "\r\n\t"));

   preg_match_all("/Brands.+\\n\s+(.+)\s+<\/TD>/m", $strItemContent, $arrItemContent);
   $strItem[3] = trim(trim($arrItemContent[1][0], "\r\n\t"));

   preg_match_all("/Gender.+\\n\s+([a-zA-Z]+)\s+<\/TD>/m", $strItemContent, $arrItemContent);
   $strItem[4] = trim(trim($arrItemContent[1][0], "\r\n\t"));

...............................

   preg_match_all("/Size.+\\n\s+(.+)\s+<\/TD>/m", $strItemContent, $arrItemContent);
   $strItem[5] = trim(trim($arrItemContent[1][0], "\r\n\t"));

   if($strItem[5] == "free")
    $strItem[5] = "Свободный";

   if(!empty($strItem[0]))
   if(!mysql_query("INSERT INTO `".BASEPFX."brands` (
       `itemno` ,
       `brand` ,
       `cat` ,
       `gender` ,
       `size` )
       VALUES ('".$strItem[0]."', '".$strItem[3]."', '".$strItem[2]."', '".$strItem[4]."', '".$strItem[5]."');", $db))
   {
    $g_strPageData = $g_strPageData."<font class=\"pRead\"><b>Не удалось добавить:&nbsp;&nbsp;&nbsp;&nbsp;".$strItem[3]." | ".$strItem[2]." | ".$strItem[0]." | ".$strItem[1]." | ".$strItem[4]." | ".$strItem[5]."</b></font><br>";
   } else {
    $g_strPageData = $g_strPageData."Добавлено:&nbsp;&nbsp;&nbsp;&nbsp;".$strItem[3]." | ".$strItem[2]." | ".$strItem[0]." | ".$strItem[1]." | ".$strItem[4]." | ".$strItem[5]."<br>";
   }
   // После засыпаем на 1-3сек
   sleep(rand(1, 3));
  }

  ++$iPageNum;
  sleep(60 + rand(60, 120));
 }
}
}
?>




Спустя 56 минут, 57 секунд (3.02.2009 - 03:00) kirik написал(а):
Цитата (EvilDev @ 2.02.2009 - 18:03)
1. Если я с сайта нчинаю грабить всю инфу (например о товарах: наименование, номер, цена п пр.) то на это распространяется уголовная ответственность?

Если вы копируете и используете копирайтный материал - несомненно.

Цитата (EvilDev @ 2.02.2009 - 18:03)
2. Написал парсер, тока всеравно меня он не устраивает.../.../ Проблема в том, что он все не как не может сграбить. Я вот думаю, может скрипт перестает выполняться, так то код то правильный.

Если честно немного не понял вопроса...

ЗЫ. Очень много кода..
ЗЫ2. Мельком пробежался по коду, строчка
PHP
// Достаем из него все, что нада
 // Сначала проверим, не перешли ли мы на несуществующую страницу
 preg_match_all("/color=red><B>([0-9]{1,4})/m", $strBrandContent, $arrBrandContent);

Если сервер отдает 404-й заголовок на несуществующей странице, то лучше воспользоваться curl (или сокетами) для получения заголовка. Потому как ваша регулярка может нечайно подойти к нормальной странице.

Спустя 1 час, 52 минуты, 56 секунд (3.02.2009 - 04:53) EvilDev написал(а):
1. А как это работает? Всмысле могут ли они меня найти? Ну там допустим при парсинге вычислить ип и пр пр пр... Достать инфы надо много, я намекаю на sleep() в коде т.е. чтобы не такая большая нагрузка на их сервер была. Я понимаю, что щя из моих слов ничего не понятно, всетаки утро уже) В общем они могут узнать, что я у них в определенный момент сливаю инфу?
2. Он вроде все достать не может. Слишком мало получилось инфы после вып-я скрипта o0 Хотя ошибок быть не может

Спустя 1 час, 1 минута, 7 секунд (3.02.2009 - 05:54) kirik написал(а):
Цитата (EvilDev @ 2.02.2009 - 20:53)
1. А как это работает? Всмысле могут ли они меня найти?

То, что ты парсишь сайт они смогут заметить, также они смогут вычислить твой айпишник (айпи твоего сервера), но никаких предъяв по этому поводу они тебе сделать не смогут. А вот если ты на своем сайте разместишь данную информацию, то к этому можно придраться. Хотя не думаю что кто-то будет заинтересован чтобы тебя посадить за это smile.gif Максимум сообщат хостеру, а тот в свою очередь либо сделает предупреждение, либо просто закроет сайт. Также могут сообщить регистратору домена чтобы прикрыли твой домен.
А что за сайт такой? smile.gif

Цитата (EvilDev @ 2.02.2009 - 20:53)
2. Он вроде все достать не может. Слишком мало получилось инфы после вып-я скрипта o0 Хотя ошибок быть не может

Ну если ты видишь что он отпарсил не все, то значит скрипт либо неправильно парсит, либо он умирает по таймауту.

Спустя 6 часов, 50 минут, 10 секунд (3.02.2009 - 12:44) EvilDev написал(а):
Сказать не могу, сорь) Пасиб большое)

Спустя 9 часов, 37 минут, 40 секунд (3.02.2009 - 22:22) kirik написал(а):

Спустя 42 минуты, 50 секунд (3.02.2009 - 23:04) EvilDev написал(а):
Пасиб. Афигеть. Вот тебе и свобода интернета... Реально перегнули палку o0
Скорее всего шумиха просто и все..


_____________
HTML5, CSS3, jQuery, Node.js, PHP, Yii, Joomla, MySQL, MongoDb, GIMP
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.