/**
* 采集的具体思路是
* 1:先采集列表 ,再采集具体内容入库
* 先通过list.php页面,采用页面跳转的方式将远程新闻列表的连接和标题保存到本地的临时数据库中
* 然后再通过view.php页面,通过库中id跳转的方式,根据库中url匹配远程新闻具体内容,通过采集规则将内容采集下来,
* 然后单条入库.
*/
include_once("conn.php");
//获取远程数据
$id = $_GET['id'];
if(isset($id) && $id <= 102)
{
if($id<100){
$id='0'.$id;
}
$list = file_get_contents("http://it.sohu.com/7/1002/17/column203661721_6$id.shtml");
//echo $con;
//前面定开始符结束符,自己定义
$preg = "/<h1>·<a href='(.*)' target='_blank'>(.*)<\/a>/iUs";
preg_match_all($preg,$list,$arr);
foreach($arr[1] as $key => $val)
{
echo $val." ".$arr[2][$key]."<br>";
//插入库中
$sql = "INSERT into `tmp_url` (`title`,`url`) VALUES ('".$arr[2][$key]."','".$val."')";
mysql_query($sql);
}
$_GET['id'] += 1;
echo "<script>location.href='list.php?id=".$_GET['id']."'</script>";
}
//通过网页跳转的好处是不会使php死掉
/*
* //print_r($arr);
* 打印得到的效果为
* Array
(
[0] => Array
(
[0] => <h1>·<a href='http://it.sohu.com/20120310/n337289407.shtml' target='_blank'>工商总局今年将对网络经营者引入黑名单制度</a>
[1] => <h1>·<a href='http://it.sohu.com/20120310/n337289293.shtml' target='_blank'>北京市东城区将推网络版民情日记 服务记录可溯</a>
)
(
[0] => http://it.sohu.com/20120310/n337289407.shtml
[1] => http://it.sohu.com/20120310/n337289293.shtml
)
(
[0] => 工商总局今年将对网络经营者引入黑名单制度
[1] => 北京市东城区将推网络版民情日记 服务记录可溯
*/
?>
include_once("conn.php");
$id = $_GET['id'];
$sql = "SELECT * FROM tmp_url WHERE id = $id";
$res = mysql_query($sql);
$val = mysql_fetch_array($res);
$nextid = nextId($id);
$title = $val['title'];
echo "<b>$title</b><br>";
//获取采集信息的具体内容
$ret = content($val["url"]);
echo $ret;
$inssql = "INSERT INTO `news` (`id`,`title`,`content`) VALUES (NULL,'".$title."','".$ret."')";
mysql_query($inssql);
if($nextid){
echo "<script>location.href='view.php?id=".$nextid."'</script>";
}else{
echo "采集完毕";
}
/**
* 获取采集的具体内容
* @param $url 连接地址
*/
function content($url)
{
$content = file_get_contents($url);
$preg = '/<!-- 正文 st -->(.*)<div class="editShare clear">/iUs'; //不分大小写,防贪婪去回车
preg_match($preg,$content,$arr);
//var_dump(htmlspecialchars($arr[1][0])); //htmlspecialchars()把一些预定义的字符转为实体
//var_dump($arr);
$res = easy($preg,$content);
return $res;
}
function easy($preg,$content,$key=1)
{
preg_match($preg,$content,$arr);
return $arr[$key];
}
//获取数据库中下一条信息id值的方法
function nextId($id)
{
$sql = "SELECT * FROM tmp_url WHERE id > $id ORDER BY id asc LIMIT 1";
$res = mysql_query($sql);
$val = mysql_fetch_array($res);
return $val['id'];
}