智能文章系统实战-数据采集(3)

admin 发布于:2018-6-19 18:26  有 2135 人浏览,获得评论 0 条 标签: php 

<?php
require_once('./inc.php');

//利用正则分析获取页面内容中相关的标题和内容。完成数据采集。

//采集的页数
$p=1;

//循环采集
for($i=1;$i<=$p;$i++)
{
	//采集的列表地址(此地址仅供演示学习用)
	$url='http://feed.mix.sina.com.cn/api/roll/get?pageid=153&lid=2509&k=&num=50&page='.$i;

	
	//获取内容
	$fileContent=file_get_contents($url);

	
	//解析JSON
	$jsonArray=json_decode($fileContent,true);

	//获取列表数据
	$dataList=$jsonArray['result']['data'];
	
	
	if($dataList)
	{
		foreach($dataList as $key => $row)
		{
			$wapurl=$row['wapurl'];
			
			//获取页面的HTML源码
			$content=file_get_contents($wapurl);
			
			//获取标题
			preg_match('|<h1 class="art_tit_h1">(.*)</h1>|Uis',$content,$match);
			$title=$match[1];
			
			//获取类别
			preg_match('|<h2 class="hd_tit_l">(.*)</h2>|Uis',$content,$match);
			$category=preg_replace('/(\s+)/',' ',trim(strip_tags($match[1])));
			
			
			//获取内容
			preg_match('|<!--标题_e-->(.*)<div id=\'wx_pic\' style=\'margin:0 auto;display:none;\'>|Uis',$content,$match);
			
			//过滤内容中多余的标签
			$content=trim($match[1]);
			$content=preg_replace("|<section(.*)</section>|Uis","",$content);
			$content=preg_replace('|<h2 class="art_img_tit">(.*)</h2>|Uis',"",$content);
				
			//过滤内容中多余的图片	
			preg_match_all('|<img (.*) src="(.*)" data-src="(.*)" (.*)>|Uis',$content,$imgMatch);
			if($imgMatch[0])
			{
				foreach($imgMatch[0] as $imgKey => $img)
				{
					if(strpos($imgMatch[4][$imgKey],'style="display:none"')==true)
					{
						$content=str_replace($img,"",$content);
					}
					else
					{
						$content=str_replace($img,"<img src='".$imgMatch[3][$imgKey]."' ".$imgMatch[4][$imgKey]."/>",$content);
					}
					
				}
			}
			
			//把符合条件的数据存入数据库,完成数据采集
			$times=time();
			if($title && $content && strlen($title)>3 && strlen($content)>100)
			{
        		//插入数据库
        		$sql="INSERT INTO article SET `title`='".addslashesObj($title)."',`content`='".htmlspecialcharsObj(addslashesObj($content))."',`times`='".$times."'";
				$ret=$db->query($sql);
			}		
		}
	}

}


?>
总结:采用PHP正则分析网页源代码获取相关内容,把解析的内容插入数据库中。