使用CURL解析单个链接并将其保存在txt文件中

时间:2012-03-03 08:00:31

标签: php curl persistence

我的任务是解析给定网址中的一个链接。

问题在于,每次刷新页面时,我都会使用Curl下载目标网站,并使用正则表达式查找链接。当给定的链接相同时,如何避免再次下载目标网站?

$url = 'http://ruh.kz';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ($ch , CURLOPT_USERAGENT , "Mozilla/5.0 ");
curl_setopt ($ch , CURLOPT_RETURNTRANSFER , 1 );
$content = curl_exec($ch);
curl_close($ch);

$link = preg_match_all('/<h3 class="entry"><a href="(.*)">(.*)<\/a><\/h3>/', $content, $matches);
$link = $matches[1][0];
$title = $matches[2][0];

输出:

<a href="http://ruh.kz<?php print $link; ?>" target="_blank"><?php print $title; ?></a>

2 个答案:

答案 0 :(得分:1)

解决此问题的最简单方法是记住缓存中所有已解析/加载的URL。这意味着,无论何时成功处理URL,都要将URL存储在会话/ cookie /数据库中(最适合您的目的)。

在页面刷新时首先检查此缓存。如果URL没有存储在那里,最好加载/解析。

答案 1 :(得分:0)

您可以先使用simple html dom制作foreach,然后根据需要解析链接。

    require('simple_html_dom.php');
    $url = 'http://ruh.kz';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt ($ch , CURLOPT_USERAGENT , "Mozilla/5.0 ");
    curl_setopt ($ch , CURLOPT_RETURNTRANSFER , 1 );
    $content = curl_exec($ch);
    curl_close($ch);
    $html= str_get_html($content); 
    foreach($html->find('.entry') as $element){
        preg_match_all('/<a href="(.*)">(.*)<\/a>/', $element, $matches);
        $link = $matches[1][0];
        $title = $matches[2][0];
        echo '<a href="http://ruh.kz'.$link,'" target="_blank">'.$title.'</a><br />';
    }