2011-12-15 3 views
2

Я использую Simple HTML DOM для очистки (с разрешения) некоторых веб-сайтов. Я в основном очищаю около 50 различных сайтов со статистическими данными, которые обновляются примерно четыре раза в день.Simple Html DOM Caching

Как вы можете себе представить, требуется время, чтобы выполнить очистку, и поэтому мне нужно ускорить процесс, выполнив некоторое кэширование.

Мое видение:

DATA-PRESENTATION.php // где все результаты показаны

SCRAPING.php // код, который делает работу

Я хочу установить вверх cron job на SCRAPING.PHP таким образом, чтобы он выполнялся 4 раза в день и сохранял все данные в caché, которые затем будут запрашиваться DATA-PRESENTATION.PHP, что ускоряет работу для пользователя.

Мой вопрос: как я могу реализовать эту вещь caché? Я очень новичок в PHP, я читал учебники, но они не очень полезны, и есть всего несколько, поэтому я просто не мог научиться этому.

Я знаю, что другое решение может быть реализовано в базе данных, но я не хочу этого делать. Кроме того, я читал о решениях высокого уровня, таких как memcached, но сайт очень прост и для личного использования, поэтому мне не нужны такие вещи.

Спасибо!

SCRAPING.PHP

<?php 
include("simple_html_dom.php"); 

// Labour stats 
$html7 = file_get_html('http://www.website1.html'); 
$web_title = $html7->find(".title h1"); 
$web_figure = $html7->find(".figures h2"); 

?> 

ДАННЫХ PRESENTATION.PHP

<div class="news-pitch"> 
<h1>Webiste: <?php echo utf8_encode($web_title[0]->plaintext); ?></h1> 
<p>Unemployment rate: <?php echo utf8_encode($web_figure[0]->plaintext); ?></p> 
</div> 

FINAL КОД! Большое спасибо @jerjer и @ PaulD.Waite, я не мог этого сделать без вашей помощи!

Файлы:

1- DataPresentation.php // здесь я показать данные, запрашиваемые в Cache.html

2- Scraping.php // здесь я скрести сайты, а затем сохранить результаты Cache.html

3- Cache.html // здесь очищающие результаты сохраняются

Я настроил Cron Job на Scraping.php, чтобы он каждый раз перезаписывал Cache.html.

1- DataPresentation.php

<?php 
include("simple_html_dom.php"); 

$html = file_get_html("cache/test.html"); 
$title = $html->find("h1"); 
echo $title[0]->plaintext; 
?> 

2- Scraping.php

<?php 
include("simple_html_dom.php"); 

// by adding "->find("h1")" I speed up things as it only retrieves the information I'll be using and not the whole page. 
$filename = "cache/test.html"; 
$content = file_get_html ('http://www.website.com/')->find("h1"); 
file_put_contents($filename, $content); 
?> 

3- кэша.HTML

<h1>Current unemployment 7,2%</h1> 

Он загружает сразу и установив вещи таким образом, я гарантировать, всегда есть Caché файл, который будет загружен.

+0

вы можете использовать файл вместо базы данных для кэширования – jerjer

ответ

3

Вот образец кэширования файлов на основе:

<?php 
    // Labour stats 
    $filename = "cache/website1.html"; 
    if(!file_exists($filename)){ 
     $content = file_get_contents('http://www.website1.html'); 
     file_put_contents($filename, $content); 
    } 

    $html7 = file_get_html($filename); 
    $web_title = $html7->find(".title h1"); 
    $web_figure = $html7->find(".figures h2"); 

?> 
+1

Вы должны были бы добавить немного кода, чтобы сделать его обновить 4 раза в день, хотя. Если я правильно понял этот код, он однажды очистит веб-сайт, а затем навсегда загрузит кешированный файл. Например, задание cron может удалять файлы кэша каждый раз, когда он запускается. –

+0

согласился с вами Пол, задача задания cron - аннулировать кешированные файлы – jerjer

+0

Многие благодарны ребятам! Я не мог сделать это без вашей помощи! Я отправил окончательный код! – user1044994

1

Попробуйте использовать библиотеку Zend_Cache из Zend_Framework. Это довольно простая в использовании:

function loadHtmlWithCache($webAddress){ 

    $frontendOptions = array(
     'lifetime' => 7200, // cache lifetime of 2 hours 
     'automatic_serialization' => true 
    ); 

    $backendOptions = array(
     'cache_dir' => './tmp/' // Directory where to put the cache files 
    ); 

    // getting a Zend_Cache_Core object 
    $cache = Zend_Cache::factory('Core', 
           'File', 
           $frontendOptions, 
           $backendOptions); 

    if(($result = $cache->load($webAddress)) === false) { 


     $html7 = file_get_html($webAddress); 
     $web_title = $html7->find(".title h1"); 
     $web_figure = $html7->find(".figures h2"); 
     $cache->save($webAddress,array('title'=>$web_title,'figure' => $web_figure)); 

    } else { 

     // cache hit! shout so that we know 
     $web_title = $result['title']; 
     $web_figure = $result['figure']; 

    } 

}

Смежные вопросы