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:等您坐沙发呢!

发表评论

表情
还能输入210个字