首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >phpspider爬虫框架的使用

phpspider爬虫框架的使用

作者头像
码缘
发布2019-07-01 15:11:56
6690
发布2019-07-01 15:11:56
举报
文章被收录于专栏:PHP修行之路PHP修行之路

这几天使用PHP的爬虫框架爬取了一些数据,发现还是挺方便的,先上爬虫框架的文档 phpspider框架文档

使用方法其实在文档中写的很清楚而且在demo中也有使用示例,这里放下我自己的代码做个笔记

<?php
include "./autoloader.php";

use phpspider\core\phpspider;
/* Do NOT delete this comment */
/* 不要删除这段注释 */

$configs = array(
    'name' => '中国保温网',
    'domains' => array(
        'www.cnbaowen.net',
        'cnbaowen.net'
    ),
    'scan_urls' => array(
        'http://www.cnbaowen.net/news/list-3720-1.html'
    ),

    'export' => array(
        'type' => 'db',
        'table' => 'articles_mc',
    ),

    'db_config' => array(
        'host'  => '127.0.0.1',
        'port'  => 3306,
        'user'  => 'root',
        'pass'  => '123456',
        'name'  => 'spider',
    ),

    'content_url_regexes' => array(
        "http://www.cnbaowen.net/news/show-\d+.html"
    ),

    'list_url_regexes' => array(
        "http://www.cnbaowen.net/news/list-3720-\d+.html"
    ),

    'fields' => array(
        array(
            // 抽取内容页的文章内容
            'name' => "title",
            'selector' => "//h1[@id='title']",
            'required' => true
        ),
        array(
            // 抽取内容页的文章作者
            'name' => "content",
            'selector' => "//div[@id='content']",
            'required' => true
        ),
        array(
            // 抽取内容页的文章作者
            'name' => "type"
        ),

        array(
            // 抽取内容页的文章作者
            'name' => "site_id"
        ),
    ),
);
$spider = new phpspider($configs);


$spider->on_list_page = function($page, $content, $spider){
    for ($i = 2; $i < 24; $i++)
    {
        $url = "http://www.cnbaowen.net/news/list-3720-{$i}.html";
        $spider->add_url($url);
    }
};

$spider->on_extract_field = function($fieldname, $data, $page){
    if($fieldname == "type"){
        return 2;
    }elseif($fieldname == "content"){
        $s = preg_replace("/<div style=\"float:right[\s\S]*?div>/","",$data);
        $s = preg_replace('/<a .*?href="(.*?)".*?>/is',"<a href='#'>",$s);
        $data = preg_replace('/<img.*?>/is',"",$s);
        return $data;
    }elseif($fieldname == "site_id"){
        return 1;
    }else{
        return $data;
    }
};

$spider->start();

注释:这里需要说明一点,抓取页面数据时我只需要标题和内容的部分,但是存入数据库时我需要使用到另外两个字段,所以定义字段的时候多定义了`type`和`site_id`两个字段,但是这两个字段的实际赋值是在 `on_extract_field` 回调函数中完成的

附带sql语句

CREATE TABLE `articles_mc` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(200) DEFAULT NULL,
  `content` text,
  `type` int(5) DEFAULT '0' COMMENT '文章类型 1行业资讯 2技术资料',
  `site_id` int(5) DEFAULT NULL COMMENT '站点id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4887 DEFAULT CHARSET=utf8mb4;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档