Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: парсер контента слишком долго выполняется - срабатывает ограничение по времени
 
 автор: mabelrod   (12.01.2011 в 17:51)   письмо автору
 
 

Ребята, я начинающий ... , вот хочу пропарсить контент сайта, написал такую штуку: Но мне денвер написал что время генерации скрипта 30 секунд. Я конечно могу поменять это в ини файле, но это не панацея. Расскажите что такое библиотека Curl? поможет ли он мне ? Или как вообще обойти такой ступор ?



<?php

    define
('count''100');

    
define('host','localhost');
    
define('user','root');
    
define('pass','');
    
define('database','wordpress');

    list(
$msec,$sec)=explode(chr(32),microtime());
    
$HeadTime=$sec+$msec;

    for(
$i=1;$i<=count;$i++)
    {
        
# исходник
        
$text file_get_contents'http://***/news/'.$i.'.html' );

        
# обработка
        
$text htmlspecialchars_decode($text);
        
$text str_replace('"'''$text);

        
# начало вырезки
        
$pos  strpos($text'<p align=justify>');
        
$text substr($text$pos);

        
# конец вырезки
        
$pos  strpos($text'<div align=right>');
        
$text substr($text0$pos);

        
# вывод результата
        
echo $text.'<hr>';
        
# запись в бд

    
}

    list(
$msec,$sec)=explode(chr(32),microtime());
    echo 
"<small><center>Timer: ".round(($sec+$msec)-$HeadTime,4)."</small></center><br>";

?>


  Ответить  
 
 автор: cheops   (12.01.2011 в 18:01)   письмо автору
 
   для: mabelrod   (12.01.2011 в 17:51)
 

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

PS 100 файлов - это достаточно много, возможно, стоит уменьшить количество загружаемых файлов за один заход.

  Ответить  
 
 автор: mabelrod   (12.01.2011 в 19:13)   письмо автору
 
   для: cheops   (12.01.2011 в 18:01)
 

Но если я раздею задачу на 2 части: 1) получение контента 2) парсировка = но я все равно упрусь что мне не хватает ресурсов ....

  Ответить  
 
 автор: nikita2206   (12.01.2011 в 19:26)   письмо автору
 
   для: mabelrod   (12.01.2011 в 19:13)
 

Чтобы ини не трогать используй set_time_limit()

  Ответить  
 
 автор: mabelrod   (13.01.2011 в 09:44)   письмо автору
 
   для: nikita2206   (12.01.2011 в 19:26)
 

А что если set_time_limit() не трогать ? вопрос чисто теоретический .... ну люди же делают как то, что уходят курить на пол дня, а контент сливается ?

  Ответить  
 
 автор: cheops   (13.01.2011 в 09:51)   письмо автору
 
   для: mabelrod   (13.01.2011 в 09:44)
 

Если решать одним скриптом, то будет ненадежно, как бы не изворачиваться: пол дня и 30 секунд - это несопоставимые интервалы. В таких случаях, особенно когда дело происходит не на сервере, а на локальной машине, отменяют временные ограничения.
<?php
  set_time_limit
(0);
?>

Если дело происходит на сервере, то задачу разбивают на несколько скриптов, которые последовательно запускают при помощи cron(). Т.е. ряд скриптов качают контент. Другой скрипт запускается переодически и проверяет обновления, если их нет - ничего не делает, если обновления поступили - занимается их разбором.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования