|
|
|
| Ребята, я начинающий ... , вот хочу пропарсить контент сайта, написал такую штуку: Но мне денвер написал что время генерации скрипта 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($text, 0, $pos);
# вывод результата
echo $text.'<hr>';
# запись в бд
}
list($msec,$sec)=explode(chr(32),microtime());
echo "<small><center>Timer: ".round(($sec+$msec)-$HeadTime,4)."</small></center><br>";
?>
|
| |
|
|
|
|
|
|
|
для: mabelrod
(12.01.2011 в 17:51)
| | Хм... лучше разделить задачи получения контента и его парсировки. Т.е. сначала загрузить HTML-файлы при помощи file_get_contents() в локальную директорию. А потом неспеша их разбирать другим скриптом, запущенным после того, как все нужные файлы будут загружены.
PS 100 файлов - это достаточно много, возможно, стоит уменьшить количество загружаемых файлов за один заход. | |
|
|
|
|
|
|
|
для: cheops
(12.01.2011 в 18:01)
| | Но если я раздею задачу на 2 части: 1) получение контента 2) парсировка = но я все равно упрусь что мне не хватает ресурсов .... | |
|
|
|
|
|
|
|
для: mabelrod
(12.01.2011 в 19:13)
| | Чтобы ини не трогать используй set_time_limit() | |
|
|
|
|
|
|
|
для: nikita2206
(12.01.2011 в 19:26)
| | А что если set_time_limit() не трогать ? вопрос чисто теоретический .... ну люди же делают как то, что уходят курить на пол дня, а контент сливается ? | |
|
|
|
|
|
|
|
для: mabelrod
(13.01.2011 в 09:44)
| | Если решать одним скриптом, то будет ненадежно, как бы не изворачиваться: пол дня и 30 секунд - это несопоставимые интервалы. В таких случаях, особенно когда дело происходит не на сервере, а на локальной машине, отменяют временные ограничения.
<?php
set_time_limit(0);
?>
|
Если дело происходит на сервере, то задачу разбивают на несколько скриптов, которые последовательно запускают при помощи cron(). Т.е. ряд скриптов качают контент. Другой скрипт запускается переодически и проверяет обновления, если их нет - ничего не делает, если обновления поступили - занимается их разбором. | |
|
|
|