论PHP采集

论PHP采集


1. 什么是采集?
网上说,把别人网站的信息搜集和整理放到自己的网站或本地就叫采集。等于没说嘛,我还说把孙子兵法看看记到脑子里就叫采集呢?这种解释无法认识到采集的原貌。所以我们从有血有肉的例子来看什么是采集:这是一个资讯网站,我们的最终目的就是把图片中的标题和内容扒下来,这就是采集。

2. 如何实现采集?
    $url='http://www.koyuncaijing.com/insider/simple.html';//采集地址
    $ch=curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//1 curl_exec()获取的信息以字符串返回
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0');//http请求中包含User-Agent 火狐//Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 谷歌
    $content=curl_exec($ch);//执行抓取任务,获取整个网页内容
    curl_close($ch);
故事还没有结束,现在我们拥有了网页全部内容的字符串,接下来要做的就是提取出需要的部分。
<1> 考虑到版权,很多时候我们需要替换掉一些固定版权信息
$content=str_replace("云财经讯,"," ",$content);
<2> 开始正则匹配需要的内容(可以把正则理解成简单字符串,去森林里找叫小明的猫是字符串,那正则就是找符合一定条件的那些猫),正则怎么写,这个时候我们就要根据网页源代码的结构来分析;

正则表达式有了,现在开始用这个式子去找东西,我们使用函数 preg_match_all(),这个函数的作用是找出那些特定的部分并放入到一个二维数组(根据正则的分组来决定二维数组的键数):
此处我们要的是标题,正好在二维数组的最后一个
所以$data1[2]就是我们想要的

这里写图片描述

同理我们抓取内容
$data2[1]就是我们要的(正则断言要加括号,但是不会列入到二维数组)

将两个数组合成为二维数组,二维数组的每个下标对应一组标题和内容
$arr=array();
foreach($data1[2] as $k=>$v){
    $arr[]=array('title'=>$v,'content'=>data2[1][$k]);
}
终于,我们得到了想要的 $arr
完整代码:(函数封装,写入数据库)
<?php
header("content-type:text/html;charset=utf-8");
/*连接数据库*/
$host="localhost";
$user="root";
$pass="";
$conn=new mysqli($host,$user,$pass,"zed");
if($conn->connect_error){
    die("连接失败".$conn->connect_error);
}
$conn->query("set names utf8");//指定写入数据库时的编码,不然会乱码
/*采集函数*/
function caiJi(){ 
    /*抓取得到全部字符串*/
    $url='http://www.koyuncaijing.com/insider/simple.html';//采集地址
    $ch=curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//1 curl_exec()获取的信息以字符串返回
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0');//http请求中包含User-Agent 火狐
    //Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36 谷歌
    $content=curl_exec($ch);//执行抓取任务,获取整个网页内容
    curl_close($ch);
    /*字符替换*/
    $content=str_replace("云财经讯","daydaymiddle",$content);
    /*正则匹配*/        
    $pattern2='/<\/h4>(.*?)(?=<)/s';
    preg_match_all($pattern2,$content,$data2);
    /*数组合成*/
    $arr=array();
    foreach($data1[2] as $k=>$v){
        $arr[]=array('title'=>$v,'content'=>$data2[1][$k]);
    }
    /*返回结果数组*/
    return $arr;
}
$result=caiJi();
/*写入数据库*/
$j=0;//计数
for($k=0;$k<count($result);$k++){
    $title=$result[$k]['title'];
    $content=trim($result[$k]['content']);
    $sql="INSERT INTO `news`(`title`,`content`) VALUES('$title','$content')";
    $conn->query($sql);
    $j++;
}
echo '总共插入'.$j.'条数据';
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值