PHPackages                             icy8/web-spider - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. icy8/web-spider

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

icy8/web-spider
===============

1.0.1(3y ago)07MITPHPPHP &gt;=7.0

Since Dec 5Pushed 3y ago1 watchersCompare

[ Source](https://github.com/d2gin/web-spider)[ Packagist](https://packagist.org/packages/icy8/web-spider)[ RSS](/packages/icy8-web-spider/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (2)Versions (2)Used By (0)

多进程web爬虫框架
==========

[](#多进程web爬虫框架)

基于链接挖掘策略的web爬虫框架，实现多进程采集和xpath选择器等基础功能。

### 软件架构

[](#软件架构)

1. guzzlehttp
2. php&gt;=7.2
3. 多进程模型
4. Redis

### 安装

[](#安装)

1. 在线安装

    ```
    composer require icy8/web-spider
    ```
2. 离线安装

    下载项目解压到目录`vendor/icy8`

    编辑`composer.json`：

    ```
    {
        "require": {
            "icy8/web-spider": "dev-master"
        },
        "repositories": [
            {
            "type": "path",
            "url": "vendor/icy8/web-spider"
            }
        ]
    }
    ```

    安装

    ```
    composer install
    ```
3. VCS安装

    编辑`composer.json`：

    ```
    {
        "require": {
            "icy8/web-spider": "dev-master"
        },
        "repositories": [
            {
            "type": "vcs",
            "url": "https://github.com/d2gin/web-spider"
            }
        ]
    }
    ```

    安装

    ```
    composer install
    ```

### 原理

[](#原理)

1. 链接挖掘

    - 框架本身是基于链接的，大致分为列表页和内容页链接。其中内容页链接最为重要，是数据的来源页。
    - “挖掘”理解为字面意思，从页面中收集链接，然后筛选我们需要的链接，将其写入链接池中，这是一个简单的筛选过程。
2. 链接池

    - 内置有基于`SplQueue`、`Redis`作为链接存储的容器。
    - 基于`SplQueue`的容器：这个原理很简单，就是利用`PHP`自带的`SplQueue`类来作为队列，存储合格的链接。他是基于单进程的，多进程不建议使用这个容器来运行框架。
    - 基于`Redis`的容器：利用的是`列表`的数据类型存储，因为Redis大部分都是原子操作，所以可以利用`Redis`做多进程的数据容器。
3. 选择器

    - 数据的匹配是基于各种选择器的，目前设想的有`xpath`和`正则`两种方案。
    - xpath：基于`DOMXPath`封装的选择器，xpath相关语法需自行在网上查阅。
    - regex：基于正则表达式的选择器，暂未实现。

### 说明

[](#说明)

1. 本身只提供数据匹配，产生的数据需要自行写入库。
2. 多进程采集要使用`Redis`作为链接池容器，否则会造成页面的重复采集，如果不介意这个问题的话可以忽略这一条。
3. 多进程不支持windows系统。
4. 不建议同一个脚本同时重复执行。

### 用例

[](#用例)

1. 编辑脚本`crawl.php`

    ```
