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类型就完整存放下了。
    下面是数据抓取入库后的部分截图:

  • 相关阅读:
    168. Excel Sheet Column Title
    171. Excel Sheet Column Number
    264. Ugly Number II java solutions
    152. Maximum Product Subarray java solutions
    309. Best Time to Buy and Sell Stock with Cooldown java solutions
    120. Triangle java solutions
    300. Longest Increasing Subsequence java solutions
    63. Unique Paths II java solutions
    221. Maximal Square java solutions
    279. Perfect Squares java solutions
  • 原文地址:https://www.cnblogs.com/iaknehc/p/7785102.html
Copyright © 2011-2022 走看看