PHP生成以及读取xml
两个网站想同步更新文章并引流到一个网站,一开始的想法是读取远程服务器的mysql,这样会方便很多。但是发现只为了几条数据读取远程服务器好像浪费了很多资源,所以就写了一个简单的php爬虫,把最新的几篇文章抓取并保存到xml里面,这样不仅比读取mysql快,而且没有浪费那么多资源。
抓取源代码:(因为保密原则抓取网址改成自己博客了)
<?php header("Content-Type: text/html; charset=UTF-8"); $url="http://www.yiecho.com/"; function get_url_contents($url){ if(function_exists('curl_init')){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); //设置访问的url地址 //curl_setopt($ch,CURLOPT_HEADER,1); //是否显示头部信息 curl_setopt($ch, CURLOPT_TIMEOUT, 5); //设置超时 //curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_); //用户访问代理 User-Agent curl_setopt($ch, CURLOPT_REFERER,_REFERER_); //设置 referer curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); //跟踪301 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回结果 $r = curl_exec($ch); curl_close($ch); }else{ $r = @file_get_contents($url); } return $r; } $contents =get_url_contents($url); //获取网页数据 $pattern='/<ul class=\"clearfix\">(.*?)<\/ul>/is'; preg_match($pattern,$contents,$result); $uldata=$result[1]; $pattern='/<li><a href=\"(.*?)\"/is'; preg_match_all($pattern,$uldata,$result); $urllist=$result[1]; $pattern='/<span>(.*?)<\/span>/is'; preg_match_all($pattern,$uldata,$result); $namelist=$result[1]; $pattern='/lazysrc=\"(.*?)\"/is'; preg_match_all($pattern,$uldata,$result); $imglist=$result[1]; $header = '<?xml version="1.0" encoding="UTF-8"?><departs>'; $footer = '</departs>'; for($i=0;$i<18;$i++){ $data.=<<<EOT <depart> <url>$urllist[$i]</url> <img>$imglist[$i]</img> <name>$namelist[$i]</name> </depart> EOT; } $data=$header.$data.$footer; file_put_contents("tu.xml", $data); ?>
显示代码:
<?php header("Content-Type: text/html; charset=UTF-8"); $xml_array=simplexml_load_file('text.xml'); //将XML中的数据,读取到数组对象中 for($i=0;$i<12;$i++){ echo $xml_array->depart[$i]->name."<br />"; } // foreach($xml_array as $tmp){ // echo $tmp->name."<br />"; // } ?>
读取本地的xml比读取远程的mysql快很多,只要做一个定时任务就可以每小时更新或每天更新一次了。
PHP生成以及读取xml:等您坐沙发呢!