zoukankan      html  css  js  c++  java
  • 使用phpspider抓取网站文章

    本示例使用phpspider作为爬虫,抓取了华尔街见闻部分栏目文章,下面是具体的实现过程。

    phpspider 文档:https://doc.phpspider.org/demo-start.html

    第一步:使用composer下载phpspider,命令如下:

    1 composer require owner888/phpspider

    生成的composer.json文件内容如下

    1 {
    2     "require": {
    3         "owner888/phpspider": "^2.1"
    4     }   
    5 }

    第二步:在composer.json文件的同级目录下,创建spider.php脚本文件,内容如下:

     1 <?php
     2 require './vendor/autoload.php';
     3 
     4 use phpspidercorephpspider;
     5 /* Do NOT delete this comment */
     6 /* 不要删除这段注释 */
     7 //看了一下源代码,作者将这注释写到构造函数中了,所以尊重作者意愿,没有去掉,去掉会报错。
     8 $configs = array(
     9     'name' => '华尔街日报',
    10     'domains' => array(
    11         'wallstreetcn.com',
    12     ),
    13     'scan_urls' => array(
    14         'http://wallstreetcn.com/'   //华尔街见闻网址
    15     ),
    16     'content_url_regexes' => array(
    17         "http://wallstreetcn.com/articles/d+"    //华尔街见闻网站文章url模式
    18     ),
    19     'fields' => array(
    20         array(
    21             // 抓取内容页的文章内容
    22             'name' => "article_content",
    23             'selector' => "//*[@class='node-article-content']",   //文章内容区域class
    24             'required' => true
    25         ),
    26             // 抓取内容页的文章题目
    27         array(
    28                 'name'=>'article_title',
    29                 'selector'=>"//*[@class='article__heading__title']",   //文章题目区域class
    30                 'required'=>true
    31         ),
    32         //抓取内容页文章时间
    33         array(
    34                 'name'=>'article_time',
    35                 'selector'=>"//*[@class='meta-item__text']",     //文章发布时间区域class
    36                 'required'=>true
    37         ),
    38     ),
    39         //脚本输出类型,输出到数据库
    40         'export'=>array(
    41                 'type'=>'db',
    42                 'table'=>'articles'  //存放文章的数据表
    43         ),
    44         //数据库连接配置
    45         'db_config'=>array(
    46                 'host'=>'127.0.0.1',
    47                 'port'=>3306,
    48                 'user'=>'mysql',  //连接数据库的用户名,根据自己环境定义
    49                 'pass'=>'123456',  //连接数据库的密码,根据自己环境定义
    50                 'name'=>'test'   //存放的数据库
    51         ),
    52 
    53 );
    54 
    55 
    56 $spider = new phpspider($configs);
    57 $spider->start();

    第三步:创建文章表articles,SQL语句如下:

     1 mysql> show create table articles G
     2 *************************** 1. row ***************************
     3        Table: articles
     4 Create Table: CREATE TABLE `articles` (
     5   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
     6   `article_content` text NOT NULL,
     7   `article_title` varchar(255) NOT NULL DEFAULT '',
     8   `article_time` varchar(64) NOT NULL DEFAULT '',
     9   PRIMARY KEY (`id`)
    10 ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
    11 1 row in set (0.00 sec)
    12 
    13 mysql>

    第四步:命令行下运行脚本spider.php
    php spider.php

    如下图示:

    速度还可以,只开启一个任务,三分钟左右就抓取了100文章,如果觉得慢,可以多开几个任务,在spider.php中config数组中配置

    注意第一次测试的时候,articles表中article_content使用的类型是varchar,入库后发现文章内容都被截断了,只有部分,后来改为text类型就完整存放下了。
    下面是数据抓取入库后的部分截图:

  • 相关阅读:
    linux 上安裝lnmp
    html 禁用点击事件
    nftables 是什么? 提供什么功能? 如何使用?
    ESXi主机RAID卡_HBA卡_网卡 型号_固件_驱动查询
    Celery Beat定时任务
    Centos 7/8 安装Rabbit-MQ
    Celery 最佳实践
    Django 3.0 + Celery 4.4 + RabbitMQ
    C语言Socket示例
    深入理解计算机系统 — 读书笔记
  • 原文地址:https://www.cnblogs.com/iaknehc/p/7785102.html
Copyright © 2011-2022 走看看