Простое HTML-кэширование DOM - PullRequest
2 голосов
/ 15 декабря 2011

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

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

Мое видение:

DATA-PRESENTATION.php // где отображаются все результаты

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

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

Мой вопрос: как я могу реализовать эту вещь в кэше?Я очень новичок в 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");

?>

DATA-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>

ФИНАЛЬНЫЙ КОД !Большое спасибо @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- Cache.html

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

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

Ответы [ 2 ]

3 голосов
/ 15 декабря 2011

Вот пример файлового кеширования:

<?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 голос
/ 15 декабря 2011

Попробуйте использовать библиотеку 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'];

    }

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...