Download the PHP package icy8/web-spider without Composer
On this page you can find all versions of the php package icy8/web-spider. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package web-spider
多进程web爬虫框架
基于链接挖掘策略的web爬虫框架,实现多进程采集和xpath选择器等基础功能。
软件架构
- guzzlehttp
- php>=7.2
- 多进程模型
- Redis
安装
-
在线安装
-
离线安装
下载项目解压到目录
vendor/icy8
编辑
composer.json
:安装
-
VCS安装
编辑
composer.json
:安装
原理
-
链接挖掘
- 框架本身是基于链接的,大致分为列表页和内容页链接。其中内容页链接最为重要,是数据的来源页。
- “挖掘”理解为字面意思,从页面中收集链接,然后筛选我们需要的链接,将其写入链接池中,这是一个简单的筛选过程。
-
链接池
- 内置有基于
SplQueue
、Redis
作为链接存储的容器。 - 基于
SplQueue
的容器:这个原理很简单,就是利用PHP
自带的SplQueue
类来作为队列,存储合格的链接。他是基于单进程的,多进程不建议使用这个容器来运行框架。 - 基于
Redis
的容器:利用的是列表
的数据类型存储,因为Redis大部分都是原子操作,所以可以利用Redis
做多进程的数据容器。
- 内置有基于
- 选择器
- 数据的匹配是基于各种选择器的,目前设想的有
xpath
和正则
两种方案。 - xpath:基于
DOMXPath
封装的选择器,xpath相关语法需自行在网上查阅。 - regex:基于正则表达式的选择器,暂未实现。
- 数据的匹配是基于各种选择器的,目前设想的有
说明
- 本身只提供数据匹配,产生的数据需要自行写入库。
- 多进程采集要使用
Redis
作为链接池容器,否则会造成页面的重复采集,如果不介意这个问题的话可以忽略这一条。 - 多进程不支持windows系统。
- 不建议同一个脚本同时重复执行。
用例
-
编辑脚本
crawl.php
- 执行脚本
Xpath选择器
用例:
事件
-
onLinkDigging:链接入栈前触发,如果返回的是false,那么会阻止这一次的链接入栈。
参数 类型 说明 $spider \icy8\WebSpider\Spider 当前框架的实例 $link \icy8\WebSpider\entity\Link 准备入栈的链接实例 -
onPageReady:页面请求成功后和匹配字段前触发,在这个事件中可以通过改变
$page->response
属性提前过滤一些不需要的内容。参数 类型 说明 $page \icy8\WebSpider\entity\Page 请求的页面实例 -
onContentPage:页面请求成功后和字段匹配完成后触发。
参数 类型 说明 $page \icy8\WebSpider\entity\Page 请求的页面实例 $data Array|boolean 匹配得到的数据值,如果匹配失败会返回 false
-
onListPage:页面请求成功后触发
参数 类型 说明 $page \icy8\WebSpider\entity\Page 请求的页面实例 -
onEntryPage:页面请求成功后触发
参数 类型 说明 $page \icy8\WebSpider\entity\Page 请求的页面实例 -
onLinkRetry:页面请求失败后触发,如果返回的是
false
,那么会阻止这一次重试操作。参数 类型 说明 $link \icy8\WebSpider\entity\Link 请求的页面实例
实体
目前内置的实体都是要求实现\icy8\WebSpider\entity\QueueEntity
接口的,因为部分实体如\icy8\WebSpider\entity\Link
需要入栈链接池的,需要一个接口标准。
-
\icy8\WebSpider\entity\Page:网页内容
属性 类型 说明 $link \icy8\WebSpider\entity\Link 当前页的链接信息 $response string 当前页面的html $context string 来源页的html,暂未实现 $linkDigging boolean 是否在这个页面挖掘链接,默认 true
-
\icy8\WebSpider\entity\Link:链接信息
属性 类型 说明 $url string 链接的 url
$retryTimes int 重试的次数,默认 0
$depth int 当前连接的深度,暂未实现 $method string 规定请求时的方式,暂未实现 $proxy string 规定请求时的代理地址,暂未实现 $type int 链接类型,取值 Link::CONTENT_PAGE
、Link::LIST_PAGE
、Link::ENTRY_PAGE
$referer string 来源页的 url
选择器接口
如果你想自定义一个选择器,你需要实现接口\icy8\WebSpider\selectors\Selector
。接口说明: