说到做爬虫,大家都可能第一时间想到的是python,其实php也是可以用来写爬虫程序的。 php一贯简洁、易用,使用PHPspider框架10分钟就能写出一个简单的爬虫程序。 开发文档[中文]:https://doc.phpspider.org // 推荐阅读 --- 认真阅读,花不了很久 Demo code: // 20120609 周三 家里 gitee: https://gitee.com/william_ning/the-learning-of-php-spider gtihub: ningxiaofa/the-learning-of-php-spider · GitHub Demo 1: 爬取简书的数据 code:https://gitee.com/william_ning/the-learning-of-php-spider/blob/main/jian_shu.php 一、PHP环境安装 和python一样,PHP也需要环境,可以使用官网下载的PHP,也可以使用XAMPP、PHPstudy 等集成环境下的PHP或者 Docker环境 比较推荐集成环境,省去单独安装Mysql数据库。---- 个人建议,怎么方便怎么来即可 二、Composer安装 Composer是PHP下的依赖包管理工具,类似于Python中的PIP
下载安装即可,win+R运行cmd,输入composer命令,出现如下图所示说明安装成功。 备注: Composer相关操作参见: Composer - 学习/实践_穿素白衫的少年的博客-CSDN博客 三、phpspider安装 在任意位置建立一个文件夹,例如我们要抓取简书的数据,我们可以在D盘建立jianshu文件夹,然后cmd命令进入该文件夹,运行命令
composer require owner888/phpspider
如下截图,便是成功安装了. 四、开始写第一个爬虫 现在打开jianshu文件夹,会发现里面多了一些东西[都是PHPspider的依赖的包],不用管它,建立一个demo.php文件,开始编写代码. 代码如下, 具体含义, 这里暂不加详说[可以查看文档, 很方便], 通过很简单的配置就可以快速运行起来.
demo.php <?php require './vendor/autoload.php'; use phpspider\core\phpspider; /* Do NOT delete this comment */ /* 不要删除这段注释 */ $configs = array( 'name' => '简书', 'log_show' => false, 'tasknum' => 1, //数据库配置 'db_config' => array( 'host' => '127.0.0.1', 'port' => 3306, 'user' => 'root', 'pass' => '', 'name' => 'demo', ), 'export' => array( 'type' => 'db', 'table' => 'jianshu', // 如果数据表没有数据新增请检查表结构和字段名是否匹配 ), //爬取的域名列表 'domains' => array( 'jianshu', 'www.jianshu.com' ), //抓取的起点 'scan_urls' => array( 'https://www.jianshu.com/c/V2CqjW?utm_medium=index-collections&utm_source=desktop' ), //列表页实例 'list_url_regexes' => array( "https://www.jianshu.com/c/\d+" ), //内容页实例 // \d+ 指的是变量 'content_url_regexes' => array( "https://www.jianshu.com/p/\d+", ), 'max_try' => 5, 'fields' => array( array( 'name' => "title", 'selector' => "//h1[@class='title']", // 匹配规则要改,因为已经变了 'required' => true, ), array( 'name' => "content", 'selector' => "//div[@class='show-content-free']", // 匹配规则要改,因为已经变了 'required' => true, ), ), ); $spider = new phpspider($configs); $spider->start(); 截图: | 五、代码编写完毕 , 新建数据库以及数据表, 表结构如下:
SQL:
-- ---------------------------- -- Table structure for jianshu -- ---------------------------- DROP TABLE IF EXISTS `jianshu`; CREATE TABLE `jianshu` ( `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = MyISAM AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
六、命令行写执行 进入jianshu目录下, 执行 php -f demo.php 回车即可 七、查看数据表 由上可知, 简单的爬虫功能初步完成. 但是仍需要优化.可以封装成通用组件, 采用面向对象编写 =====> TBD 如果爬取为csv文件, demo.php中修改为如下即可
/*'export' => array( 'type' => 'csv', 'file' => './data/jianshu.csv', // data目录下 ),*/
输出结果: Note: 如果没有如期生成内容,要着重检查的地方有: 1. 首先确保匹配规则写的没问题,而且fields配置下的required最好刚开始测试时,别必用true,否则因为匹配规则写的不正确,加上required = true,就会导致一直没有数据被生成,即便有部分是匹配到了也会,整条丢弃掉~ -------- 这个没提示 2. 其他配置问题, 但是通常会有提示信息,要认真观察输出信息/日志 请记住: 日志信息通常可以解决大多数问题~~ Demo 2: 糗事百科 code: https://gitee.com/william_ning/the-learning-of-php-spider/blob/main/qiu_shi_bai_ke.php 1. 执行命令
php -f qiu_shi_bai_ke.php
2. 爬取结果 由上可知,爬取生成的csv文件如同期望~ 这里爬取某个资源网站,花费的时间 0d 1h 27m 46s 只是一个系列 |