千家信息网

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

发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,这篇文章主要介绍了如何使用PHP蜘蛛爬虫框架来爬取数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用PHP蜘蛛爬虫框架来爬取数据文章都会有所收获,下面我们一起来看
千家信息网最后更新 2024年11月24日如何使用PHP蜘蛛爬虫框架来爬取数据

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

  我的环境是宝塔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蜘蛛爬虫框架来爬取数据"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

数据 爬虫 内容 链接 页面 框架 蜘蛛 网页 配置 代码 域名 实例 新闻 日志 标题 浏览器 知识 错误 测试 浏览 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 开展网络安全检查工作 现在的网络技术有多高 国内哪种服务器适合发个人邮件 工业网络技术对应职业 nds服务器和默认网关 观看网络安全片体会心得体会 qq小游戏服务器ip 搞网络安全的男生适合结婚吗 路南区信息网络技术答疑解惑 张伯伦视频软件开发 网络安全试卷答案2018 网页调用视频服务器代码 idc2020全球服务器出货量 品牌软件开发报价表 天津网络安全渗透工程师 数据库设计的逻辑设计阶段 北京哈希网络技术有限公司 配置注册表数据库损坏 深圳信息软件开发外包 网络安全的真实案例 物联网要考虑网络安全吗 软件开发自考本科选哪个专业 县科技局互联网监管工作方案 幼儿园网络安全故事演讲 三级模式有利于保持数据库的 武汉市软件开发招聘信息 热血传说服务器老是检测 2021Linux服务器占有率 生产部数据库设计入门经典 大学生身边的网络安全隐患
0