如何使用PHP蜘蛛爬虫框架来爬取数据

这篇文章主要介绍了如何使用PHP蜘蛛爬虫框架来爬取数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用PHP蜘蛛爬虫框架来爬取数据文章都会有所收获,下面我们一起来看看吧。

成都做网站、成都网站建设中从网站色彩、结构布局、栏目设置、关键词群组等细微处着手,突出企业的产品/服务/品牌,帮助企业锁定精准用户,提高在线咨询和转化,使成都网站营销成为有效果、有回报的无锡营销推广。创新互联专业成都网站建设十多年了,客户满意度97.8%,欢迎成都创新互联客户联系。

我的环境是宝塔lnmp,php是5.4版本,不要用这个版本,缺各种扩展库

错误1:没有该扩展,不需要再php.ini中配置

错误2:缺这个扩展库,不需要再php.ini中配置

跑跑的报这个错:PHP Fatal error:  Call to undefined function phpspider\core\mb_detect_encoding() in / on line 474

解决方法:执行 yum install php-mbstring -y

1、在linux上跑demo。

条件:linux上要有php环境,代码上传上去,执行php -f demo.php

想退出这个页面执行quit 或 ctrl + c

你可能会疑惑,这要跑,爬来的数据放到哪里了呢??

2、需要在$configs中加这俩个配置(参考文档configs详解之成员):

//日志存放的位置

'log_file' => '',

'export' => array(

'type' => 'csv',

'file' => '', //爬下来的数据放在data目录下,目录和文件要自己提前创建好

)这里是存成了csv需要下载到本地电脑上看,因为这是个excel还是下载下来方便看

当然你也可以存到数据库等

3、下面是一个完整的实例:

3.1、思路 :具体还是要看代码,思路只是方便理解和记忆

//这个页面是网站首页

//这个页面是列表页

//这个页面是列表页下面的页码

这回我们就清晰了,我们要爬取的是列表页的数据:

3.1.1、接下来设置爬取规则

3.1.2、实例化,将配置传给这个类的构造函数

3.1.3、添加新的url到带爬对列

3.1.4、筛选爬到的数据,如标题弄出来,内容弄出来,并组装好数据...

3.1.5、进行入库操作

3.2、代码

require '';

use phpspider\core\phpspider;

use phpspider\core\requests;    //请求类

use phpspider\core\selector;    //选择器类

use phpspider\core\db;    //选择器类

use phpspider\core\log;    //选择器类

$configs=array(

'name'=> '爬取新闻',

//'log_show'=> true,

//定义爬虫爬取哪些域名下的网页, 非域名下的url会被忽略以提高爬取速度

'domains'=> array(

''    //写域名

),

//定义爬虫的入口链接, 爬虫从这些链接开始爬取,同时这些链接也是监控爬虫所要监控的链接

'scan_urls'=> array(

''

),

//定义内容页url的规则

'content_url_regexes'=> array(

""

),

//爬虫爬取每个网页失败后尝试次数

'max_try'=> 5,

//爬虫爬取数据导出

'export'=> array(

'type'=> 'db',

'table'=> 'pachong',    //表名

),

'db_config'=> array(

'host'=> 'localhost',

'port'=> 3306,

'user'=> '改成自己的',    //MySQL的账号

'pass'=> '改成自己的',               //mysql的密码

'name'=> '改成自己的',   //库名

),

'fields'=> array(

//从列表页开始爬

array(

'name'=> "lists",

'selector'=> "'container')]//ul//li[contains(@class,'item')]",

'required'=> true,

'repeated'=> true  //写上是数组(抓的是整个列表页),不写是字符串(只抓第一个)

),

),

//日志存放的位置

'log_file'=> 'data/qiushibaike.log',

//只记录 错误和调试日志

'log_type'=> 'error,debug,warn,error',

//爬虫爬取网页所使用的浏览器类型.随机浏览器类型,用于破解防采集

'user_agent'=> array(

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36",

"Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_3 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13G34 Safari/601.1",

"Mozilla/5.0 (Linux; U; Android 6.0.1;zh_cn; Le X820 Build/FEXCNFN5801507014S) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/49.0.0.0 Mobile Safari/537.36 EUI Browser/5.8.015S",

),

//爬虫爬取网页所使用的伪IP。随机伪造IP,用于破解防采集

'client_ip'=> array(

'192.168.0.2',

'192.168.0.3',

'192.168.0.4',

),

);

$spider=new phpspider($configs);

//爬虫初始化时调用, 用来指定一些爬取前的操作

$spider->on_start=function($spider)

{

requests::set_header("Referer", "");

};

//在爬取到入口url的内容之后, 添加新的url到待爬队列之前调用. 主要用来发现新的待爬url, 并且能给新发现的url附加数据(点此查看“url附加数据”实例解析).

$spider->on_scan_page=function($page,$content,$spider){

//列表页只采集3页。

for($i=0;$i<3;$i++){

if($i==0){    //第一页

$url="";

}else{          //之后的n页

$url="";

}

$options=[

'method'=> 'get',

'params'=> [

'page'=> $i

],

];

$spider->add_url($url,$options);    //添加新的url到待爬队列

}

};

$spider->on_extract_field=function($filename,$data,$page){

$arr=[];

//处理抽取到的fields中name==lists的数据

if($filename=='lists'){

if(is_array($data)){

foreach($data as $k=>$v){

$img=selector::select($v,"");

//如果该新闻没有图片,就删除这条数据

if(empty($img)){

unset($data[$k]);

}else{

$url="";

$title=trim(selector::select($v,""));    //抓列表页的标题

//抓列表页的图片

if(substr(selector::select($v,""),0,1)){

$title_imgs=selector::select($v,"");

}else{

$title_imgs=$url . ltrim(selector::select($v,""),'.');

}

$title_desc=trim(selector::select($v,""));    //抓列表页的新闻简介

//抓文章,跳转到内容页

$p='/

]+href * \=*["\']?([^\'"\+]).*?/i';

$title_url=selector::select($v,$p,'regex');

if(substr($title_url,0,1)=='h'){

$title_link=$title_url;

}else{

$title_link=$url . ltrim($title_url,'.');

}

$title_time=strip_tags(selector::select($v,""));  //抓列表页的时间

//组装数据

$arr[$k]=[

'title'=> $title,

'title_imgs'=> $title_imgs,

'title_desc'=> $title_desc,

'title_link'=> $title_link,    //前往内容页的链接

'title_time'=> $title_time,

];

}

}

}

}

return $arr;

};

//入库操作

$spider->on_extract_page=function($page,$data){

//    echo "

";

//    var_dump($data);

//    die;

//处理哪个数据

if(isset($data['lists'])){

foreach($data['lists'] as $v){

$arr=[

'title'=> trim($v['title']),

'title_imgs'=> urlencode($v['title_imgs']),

'title_desc'=> $v['title_desc'],

'title_link'=> urlencode($v['title_link']),

'title_time'=> $v['title_time']

];

//标题重复就不入库

$sql="select count(*) as ——count—— from ——pachong—— where ——title——".$v['title'];

$row=db::get_one($sql);

if(!$row['count']){

db::insert('pachong',$arr);

}

}

$data=$arr;

}

return $data;

};

$spider->start();

3.3、表的结构

4、按照作者的思想,每次爬取之前先要测试一下,该网站能不能爬到(参考文档:如何进行运行前测试)

注意:这是测试用的,该页面请用浏览器直接访问,方便查看

关于“如何使用PHP蜘蛛爬虫框架来爬取数据”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“如何使用PHP蜘蛛爬虫框架来爬取数据”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注创新互联行业资讯频道。


网站标题:如何使用PHP蜘蛛爬虫框架来爬取数据
文章地址:http://myzitong.com/article/gccjpp.html