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

posted on 2017-11-04 23:59  iaknehc  阅读(2856)  评论(0编辑  收藏  举报

导航