我的任务是解析给定网址中的一个链接。
问题在于,每次刷新页面时,我都会使用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>
答案 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 />';
}