关于php网络爬虫phpspider

     前几天,被老板拉去说要我去抓取大众点评某家店的数据,当然被我义正言辞的拒绝了,理由是我不会。。。但我的反抗并没有什么卵用,所以还是乖乖去查资料,因为我是从事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();

  

posted @ 2018-12-25 09:21  码农编程进阶笔记  阅读(583)  评论(0编辑  收藏  举报
返回顶部 有事您Q我