phpspider 的简单使用

  • phpspider是一款PHP开发蜘蛛爬虫框架。

    官方github下载地址:https://github.com/owner888/phpspider
    官方文档下载地址:https://doc.phpspider.org/
    由于官方文档可能会出现打不开的情况(我一开始试了很多次都打不开),这里提供一个网盘下载地址:链接:https://pan.baidu.com/s/1LfJOCw1rthN_luotF7iUDw 密码:cylb

  • 使用
    代码下载下来后里面有几个例子,我这里就以代码中糗事百科为例,主要介绍几点注意事项。
    1、代码必须放到命令行运行,可以使用 php -f 语句。
    2、在代码中的例子糗事百科抓取网址写的是 http,运行不成功,要改成 https。
    3、save_running_state 参数表示是否保存爬虫运行状态,如果选择了true,则会使用到redis。
    4、抓取时默认使用的 selector 是 xpath,如果想使用其它的可以用 selector_type 参数修改,文档中介绍目前可用 xpath, jsonpath, regex,但是我看使用 css 也是可以的。
    5、写 selector 时可以打开要抓取的页面,审查元素,选择要抓取的数据,右击->copy,选择 copy selector 或 copy xpath ,可以直接得到该元素的 selector。(这点在开发文档上也有相应的介绍)。
    6、抓取的数据存储可以有三种选择,.csv 文件,.sql 文件,也可以直接插入数据库表中,选择相应的表名即可(要字段对应)。

下面贴上我修改后的代码:

<?php
// composer下载方式
// 先使用composer命令下载:
// composer require owner888/phpspider
// 引入加载器
//require './vendor/autoload.php';// GitHub下载方式
require_once __DIR__ . '/../autoloader.php';
use phpspider\core\phpspider;/* Do NOT delete this comment */
/* 不要删除这段注释 */$configs = array('name' => '糗事百科','log_show' => true,'tasknum' => 1,'save_running_state' => false,'domains' => array('qiushibaike.com','www.qiushibaike.com'),'scan_urls' => array('https://www.qiushibaike.com/'),'list_url_regexes' => array("https://www.qiushibaike.com/8hr/page/\d+\?s=\d+"),'content_url_regexes' => array("https://www.qiushibaike.com/article/\d+",),'max_try' => 5,//'proxies' => array(//'http://H784U84R444YABQD:57A8B0B743F9B4D2@proxy.abuyun.com:9010'//),//'export' => array(//'type' => 'csv',//'file' => '../data/qiushibaike.csv',//),//'export' => array(//'type'  => 'sql',//'file'  => '../data/qiushibaike.sql',//'table' => 'content',//),'export' => array('type' => 'db','table' => 'content',),'db_config' => array('host'  => '127.0.0.1','port'  => 3306,'user'  => 'root','pass'  => 'root','name'  => 'test',),
//    'queue_config' => array(
//        'host'      => '127.0.0.1',
//        'port'      => 6379,
//        'pass'      => 'foobared',
//        'db'        => 5,
//        'prefix'    => 'phpspider',
//        'timeout'   => 30,
//    ),'fields' => array(array('name' => "article_title",'selector' => "//*[@id='single-next-link']//div[contains(@class,'content')]/text()[1]",'required' => true,),array('name' => "article_author",'selector' => "//div[contains(@class,'author')]//h2",'required' => true,),array('name' => "article_headimg",'selector' => "//div[contains(@class,'author')]//a[1]",'required' => true,),array('name' => "article_content",'selector' => "//*[@id='single-next-link']//div[contains(@class,'content')]",'required' => true,),array('name' => "article_publish_time",'selector' => "//div[contains(@class,'author')]//h2",'required' => true,),array('name' => "url",'selector' => "//div[contains(@class,'author')]//h2",   // 这里随便设置,on_extract_field回调里面会替换'required' => true,),),
);$spider = new phpspider($configs);$spider->on_handle_img = function($fieldname, $img)
{$regex = '/src="(https?:\/\/.*?)"/i';preg_match($regex, $img, $rs);if (!$rs) {return $img;}$url = $rs[1];$img = $url;//$pathinfo = pathinfo($url);//$fileext = $pathinfo['extension'];//if (strtolower($fileext) == 'jpeg') //{//$fileext = 'jpg';//} 以纳秒为单位生成随机数//$filename = uniqid().".".$fileext; 在data目录下生成图片//$filepath = PATH_ROOT."/images/{$filename}"; 用系统自带的下载器wget下载//exec("wget -q {$url} -O {$filepath}"); 替换成真是图片url//$img = str_replace($url, $filename, $img);return $img;
};$spider->on_extract_field = function($fieldname, $data, $page)
{if ($fieldname == 'article_title') {
//        if (strlen($data) > 10)
//        {//            // 下面方法截取中文会有异常
//            //$data = substr($data, 0, 10)."...";
//            $data = mb_substr($data, 0, 10, 'UTF-8')."...";
//            $data = trim($data);
//        }}elseif ($fieldname == 'article_publish_time') {// 用当前采集时间戳作为发布时间$data = time();}// 把当前内容页URL替换上面的fieldelseif ($fieldname == 'url') {$data = $page['url'];}return $data;
};$spider->start();

注意一点,on_handle_img,on_extract_field两个方法抓取其它项目时不一定适用,要改成自己的逻辑处理。

  • 运行

至此一个简单的抓取数据程序就完成了。

phpspider 的简单使用相关推荐

  1. phpspider php爬虫框架

    其实我自身的不是经常写正则,而且不规则的html去写正则本身就是件很麻烦的事情,如果页面有些微变动和更新就得再次去维护正则表达式,其实是非常蛋疼的 我第一感觉就是去找一下爬虫的库,但是发现现在php爬 ...

  2. 在docker上安装部署tomcat项目 超简单,拿来主义

    在docker中部署tomcat,非常简单,而且省去了手动安装jdk等步骤,只需要将war包复制在容器tomcat实例中的webapps下面即可.以下将详细讲解流程: 在windows中打好包以后用w ...

  3. Linux下tomcat的安装与卸载以及配置(超简单)

    无敌简单的几步 1.安装 //首先你需要下载好tomcat包 sudo tar -xvzf apache-tomcat-7.0.85.tar.gz(这里是包名) -C 你要放的位置 2.卸载 rm - ...

  4. Docker安装Apache与运行简单的web服务——httpd helloworld

    Docker运行简单的web服务--httpd helloworld目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker运行简单的web ...

  5. Docker的安装、镜像源更换与简单应用

    Docker的安装.镜像源更换与简单应用[阅读时间:约20分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.Docker的安装 四.Docker的简单应用 1. ...

  6. 基于Golang的简单web服务程序开发——CloudGo

    基于Golang的简单web服务程序开发--CloudGo[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 (1)基本要求 (2)扩展要求 三.具体 ...

  7. 简单图文配置golang+vscode【win10/centos7+golang helloworld+解决install failed等情况】

    博客目录(阅读时间:10分钟) 一.win10 0.系统环境 1. win10配置golang环境 ①下载相关软件 ②创建gowork工作空间 ③配置环境变量(GOPATH+PATH) ④验证环境配置 ...

  8. 简单介绍互联网领域选择与营销方法

    在我看来,互联网领域的选择是"安家",而营销方法的不同则表现了"定家"的方式多种多样,只有选对了,"家"才得以"安定". ...

  9. JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

    一.什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的.停工时间,就是不能向用户提供服务的时间.高可用,就是系统具有高度可用性,尽量减少停工时间.如何用最简单的方法来搭建 ...

  10. java发送简单邮件_Java程序实现发送简单文本邮件

    /** * Java程序实现发送简单文本邮件 * * @author Administrator * */ public class SendTextMail { // 定义发件人地址 public  ...

最新文章

  1. 在什么时候才会用到fireEvent方法呢?
  2. 如何知道协议在哪个OSI层上运行?—Vecloud微云
  3. sql sum嵌套查询+ group by
  4. python继承——封装
  5. 串口编程-枚举遍历串口、获取PC所有串口名称、遍历注册表项、RegEnumValue用法
  6. python地图散点图_Python中基于Basemap的三维散点图
  7. string的飞鸽传书字符串缓冲区
  8. js执行环境作用域和闭包_JavaScript中执行上下文,提升,作用域和闭包的终极指南
  9. hash存储结构【六】
  10. Ajax.Net之数据类型
  11. Lady Gaga ft.Beyonce- Telephone
  12. 十二生肖属相年份对照表(农历1900--2103)
  13. Python下载库pip pygame
  14. 办税、缴税,原来支付宝里就能搞定
  15. 通信系统:南、北向接口
  16. RS485学习(一)
  17. 信息与计算机科学丛书,信息与计算科学丛书: 典藏版
  18. java入口函数_Java 函数入口
  19. 商用车第一张,比亚迪引领汽车智能网联安全合规新趋势
  20. 大数据毕业设计 机器学习文本聚类系统 - 舆情分析

热门文章

  1. 惊呆了,我们的加密视频教学竟然可以轻易翻录和破解!!!
  2. python编写程序掷骰子游戏_python学习之掷骰子游戏
  3. Python与SEO,三大SEO网站查询工具关键词查询采集源码!
  4. 提示“百度未授权使用地图API,可能是因为您提供的密钥不是有效的百度LBS开放平台密钥”解决方案
  5. 计算机功能室设备器材清单,办公用品清单
  6. 测试5g网速的软件排行榜,2021网络测速app排行榜-手机网速测试软件推荐
  7. java 多线程 原子_Java多线程:原子量
  8. C语言学习之:一位数组指针与二维数组指针的定义与使用
  9. java计算器取余_java计算器代码,只有加减乘除和取余运算的??
  10. copy 复制文件夹目录下所有文件,包括子目录 (新思路)