分享更有价值
被信任是一种快乐

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

文章页正文上

这篇文章主要介绍了如何使用PHP蜘蛛爬虫框架来爬取数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用PHP蜘蛛爬虫框架来爬取数据文章都会有所收获,下面我们一起来看看吧。
  我的环境是宝塔lnmp,php是5.4版本,不要用这个版本,缺各种扩展库
  错误1:没有该扩展,不需要再php.ini中配置
  错误2:缺这个扩展库,不需要再php.ini中配置
  跑跑的报这个错:PHP Fatal error: Call to undefined function phpspidercoremb_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 phpspidercorephpspider;
  use phpspidercorerequests; //请求类
  use phpspidercoreselector; //选择器类
  use phpspidercoredb; //选择器类
  use phpspidercorelog; //选择器类
  $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

  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=’/
  $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蜘蛛爬虫框架来爬取数据”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注云技术行业资讯频道。

相关推荐: HTML中的标签有什么用

这篇文章将为大家详细讲解有关HTML中的标签有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 HTML标签 浏览器支持 只有IE9和更早版本的IE浏览器支持标签。应该避免使用该标签。 标签定义及使用说明 HTML5不支…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册