Форумы портала PHP.SU » » Работа с СУБД » Парсер.

Страниц (1): [1]
 

1. splish - 02 Июня, 2011 - 19:44:04 - перейти к сообщению
Добрый день, разъясните пожалуйста ситуацию.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. require_once 'connect.php';
  3. $result = mysql_query("SELECT url FROM ur");
  4. $myrow = mysql_fetch_array($result);
  5.  
  6. while ($myrow = mysql_fetch_array($result)) {
  7. $content = file_get_contents($myrow['url']);
  8.  
  9.         preg_match_all('/ottom:3px;">(.*?)</is', $content, $tit);
  10.         echo strip_tags(substr($tit[0][0],12,-1))."<br>";
  11.        
  12.        
  13.         preg_match_all('/class="eBlock">(.*?)<\/td>/is', $content, $con);
  14.         echo strip_tags(nl2br(substr($con[0][0],15)),"<br><img>");
  15.        
  16.        
  17.         mysql_query("set collation_connection = 'utf8_general_ci'");
  18.         mysql_query("set character_set_client='utf8'");
  19.         mysql_query("set character_set_results='utf8'");
  20.         mysql_query("set character_set_system='utf8'");
  21.         mysql_query('SET names=utf8');
  22.  
  23.         $query = "INSERT INTO data (title,text,cat)
  24.                                         VALUES ('".strip_tags(substr($tit[0][0],12,-1))."',
  25.                                          '".strip_tags(nl2br(substr($con[0][0],15)),"<br><img>")."',
  26.                                           '".rand(29, 44)."')";
  27.         $insert = mysql_query($query) or die(mysql_error());
  28. }
  29. ?>


Цикл не проходит по всем URL которые есть в базе (примерно 1600 урлов).
Цикл проходит 1 раз, выводит на экран первую спарсеную статью, НО не записывает её в базу.

Если убрать while, в базу нормально записывается напарсеный контент с 1 страницы.

Помогите плиз, голова не варит уже, не могу найти ошибку или же как то по другому нужно сделать.
2. altermann - 02 Июня, 2011 - 23:44:35 - перейти к сообщению
Уберите первый mysql_fetch_array, оставте тот что в цикле.



Вынесите это из цикла, достаточно одного раза:
PHP:
скопировать код в буфер обмена
  1. mysql_query("set collation_connection = 'utf8_general_ci'");
  2. mysql_query("set character_set_client='utf8'");
  3. mysql_query("set character_set_results='utf8'");
  4. mysql_query("set character_set_system='utf8'");
  5. mysql_query('SET names=utf8');


Используйте функцию mysql_real_escape_string или addslashes для экранирования данных при вставке в БД, может в статье присутствуют кавычки.

Ну примерно так:
PHP:
скопировать код в буфер обмена
  1. require_once 'connect.php';
  2. mysql_query("set collation_connection = 'utf8_general_ci'");
  3. mysql_query("set character_set_client='utf8'");
  4. mysql_query("set character_set_results='utf8'");
  5. mysql_query("set character_set_system='utf8'");
  6. mysql_query('SET names=utf8');
  7. $result = mysql_query("SELECT `url` FROM `ur`");
  8.  
  9. while ($myrow = mysql_fetch_array($result)) {
  10.     $content = file_get_contents($myrow['url']);
  11.     preg_match_all('/ottom:3px;">(.*?)</is', $content, $tit);
  12.     $sTitle = strip_tags(substr($tit[0][0], 12, -1));
  13.     echo $sTitle . "<br>";
  14.  
  15.     preg_match_all('/class="eBlock">(.*?)<\/td>/is', $content, $con);
  16.     $sData = strip_tags(nl2br(substr($con[0][0], 15)), "<br><img>");
  17.     echo $sData;
  18.  
  19.     $query = "INSERT INTO `data` (
  20.            `title`, `text`, `cat`
  21.            ) VALUES (
  22.                '" . mysql_real_escape_string($sTitle) . "',
  23.                '" . mysql_real_escape_string($sData) . "',
  24.                '" . rand(29, 44) . "'
  25.            )";
  26.     $insert = mysql_query($query) or die(mysql_error());
  27. }
3. splish - 03 Июня, 2011 - 17:42:54 - перейти к сообщению
altermann, огромное спасибо, всё работает!

 

Powered by ExBB FM 1.0 RC1