前几天,被老板拉去说要我去抓取大众点评某家店的数据,当然被我义正言辞的拒绝了,理由是我不会。。。但我的反抗并没有什么卵用,所以还是乖乖去查资料,因为我是从事php工作的,首先找的就是php的网络爬虫源码,在我的不懈努力下,终于找到phpspider,打开phpspider开发文档首页我就被震惊了,标题《我用爬虫一天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言 》,果然和我预料的一样,php就是世界上最好的语言。废话少说,下面开始学习使用。
首先看的是提供的一个demo,代码如下:
$configs = array(
\'name\' => \'糗事百科\',
\'domains\' => array(
\'qiushibaike.com\',
\'www.qiushibaike.com\'
),
\'scan_urls\' => array(
\'http://www.qiushibaike.com/\'
),
\'content_url_regexes\' => array(
"http://www.qiushibaike.com/article/\d+"
),
\'list_url_regexes\' => array(
"http://www.qiushibaike.com/8hr/page/\d+\?s=\d+"
),
\'fields\' => array(
array(
// 抽取内容页的文章内容
\'name\' => "article_content",
\'selector\' => "//*[@id=\'single-next-link\']",
\'required\' => true
),
array(
// 抽取内容页的文章作者
\'name\' => "article_author",
\'selector\' => "//div[contains(@class,\'author\')]//h2",
\'required\' => true
),
),
);
$spider = new phpspider($configs);
$spider->start();
每项具体的信息,可以去 https://doc.phpspider.org/demo-start.html 查看,哪里比较详细,这里只说下我走的弯路,
domains是定义采集的域名,只在该域名下采集,
content_url_regexes是采集的内容页,使用chrome查看网页源码,然后使用selector选择器定位,selector使用xpath格式定位参数,当然也可以用css来选择。
list_url_regexes列表页,每个列表页抓取多条content_url_regexes的url循环采集。
还有一些其他参数没有列出来,例如:
\'max_try\' => 5,
\'export\' => array(
\'type\' => \'db\',
\'conf\' => array(
\'host\' => \'localhost\',
\'port\' => 3306,
\'user\' => \'root\',
\'pass\' => \'root\',
\'name\' => \'demo\',
),
\'table\' => \'360ky\',
),
max_try 同时工作的爬虫任务数。
export采集数据存储,有两种格式,一种是写到数据库中,一种是直接生成.csv格式文件。
只要url规则写的对,就可以运行,不用管框架里面的封装。当然,此框架只能在php-cli命令行下运行,所以使用前要先配置环境变量,或者cd到php安装路径运行。
最后成功采集到大众点评某点的一千多条数据。
====================20201230完成测试版==============
<?php
/**
*User: lxw
*Date: 2020-12-29
*/
require_once __DIR__ . \'/../autoloader.php\';
use phpspider\core\phpspider;
/* Do NOT delete this comment */
/* 不要删除这段注释 */ // 不清楚他这个意思,不知道为啥不能删除
$configs = array(
\'name\' => \'糗事百科\',
\'log_show\' => true,
\'tasknum\' => 1,
\'domains\' => array(
\'qiushibaike.com\',
\'www.qiushibaike.com\'
),
\'scan_urls\' => array(
\'http://www.qiushibaike.com\'
),
\'content_url_regexes\' => array(
"http://www.qiushibaike.com/article/\d+"
),
\'list_url_regexes\' => array(
"http://www.qiushibaike.com/8hr/page/\d+"
// "http://www.qiushibaike.com/8hr/page/\d+\?s=\d+"
),
\'max_try\' => 5,
// 数据库配置
\'db_config\' => array(
\'host\' => \'127.0.0.1\',
\'port\' => 3306,
\'user\' => \'**\',
\'pass\' => \'**\',
\'name\' => \'lxw_db\'
),
\'export\' => array(
\'type\' => \'db\',
\'table\' => \'360ky\' //添加表, jianshu ,
),
\'fields\' => array(
array(
// 抽取内容页的文章内容
\'name\' => "title",
\'selector\' => "//h1[contains(@class,\'article-title\')]",
\'required\' => true
),
array(
// 抽取内容页的文章作者
\'name\' => "author",
\'selector\' => "//span[contains(@class,\'side-user-name\')]",
\'required\' => true
),
array(
// 抽取内容页的文章内容
\'name\' => "content",
\'selector\' => "//*[@id=\'single-next-link\']",
\'required\' => true
),
),
);
$spider = new phpspider($configs);
$spider->start();