高性能PHP框架webman爬虫引擎插件,如何爬取数据

文章精选推荐

1 JetBrains Ai assistant 编程工具让你的工作效率翻倍

2 Extra Icons:JetBrains IDE的图标增强神器

3 IDEA插件推荐-SequenceDiagram,自动生成时序图

4 BashSupport Pro 这个ides插件主要是用来干嘛的 ?

5 IDEA必装的插件:Spring Boot Helper的使用与功能特点

6 Ai assistant ,又是一个写代码神器

7 Cursor 设备ID修改器,你的Cursor又可以继续试用了

文章正文

webman 高性能 PHP 框架中,结合爬虫引擎插件(如 GuzzleHTTPSymfony Panther)可以轻松实现数据爬取。以下是一个完整的示例,展示如何使用 webmanGuzzleHTTP 插件来爬取网页数据。

1. 安装依赖

首先,确保你已经安装了 webman 框架和 GuzzleHTTP 插件。

bash 复制代码
composer create-project workerman/webman
cd webman
composer require guzzlehttp/guzzle

2. 创建爬虫服务

webman 中,可以创建一个服务类来处理爬虫逻辑。以下是一个简单的爬虫服务示例:

php 复制代码
<?php
namespace app\service;

use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;

class SpiderService
{
    protected $client;

    public function __construct()
    {
        // 初始化 GuzzleHTTP 客户端
        $this->client = new Client([
            'timeout' => 10, // 设置超时时间
        ]);
    }

    /**
     * 爬取网页内容
     *
     * @param string $url 目标网址
     * @return string 返回网页内容
     * @throws GuzzleException
     */
    public function crawl(string $url): string
    {
        $response = $this->client->request('GET', $url);
        return $response->getBody()->getContents();
    }

    /**
     * 解析 HTML 数据
     *
     * @param string $html 网页内容
     * @return array 返回解析后的数据
     */
    public function parseHtml(string $html): array
    {
        $dom = new \DOMDocument();
        @$dom->loadHTML($html); // 忽略 HTML 错误
        $xpath = new \DOMXPath($dom);

        // 示例:提取所有标题
        $titles = [];
        $nodes = $xpath->query('//h1'); // 查找所有 <h1> 标签
        foreach ($nodes as $node) {
            $titles[] = $node->nodeValue;
        }

        return $titles;
    }
}

3. 创建控制器

webman 中,控制器用于处理 HTTP 请求。以下是一个简单的控制器示例,用于调用爬虫服务并返回结果:

php 复制代码
<?php
namespace app\controller;

use app\service\SpiderService;
use support\Request;

class SpiderController
{
    public function crawl(Request $request)
    {
        $url = $request->get('url', 'https://example.com'); // 获取 URL 参数
        $spider = new SpiderService();

        try {
            // 爬取网页内容
            $html = $spider->crawl($url);

            // 解析 HTML 数据
            $data = $spider->parseHtml($html);

            // 返回 JSON 响应
            return json([
                'code' => 0,
                'msg' => 'success',
                'data' => $data,
            ]);
        } catch (\Exception $e) {
            return json([
                'code' => 500,
                'msg' => $e->getMessage(),
            ]);
        }
    }
}

4. 配置路由

webman 中,路由用于将请求映射到控制器。打开 config/route.php 文件,添加以下路由:

php 复制代码
<?php
use Webman\Route;

Route::get('/crawl', [app\controller\SpiderController::class, 'crawl']);

5. 运行并测试

启动 webman 服务:

bash 复制代码
php start.php start

访问以下 URL 测试爬虫功能:

http://127.0.0.1:8787/crawl?url=https://example.com

如果一切正常,你会看到返回的 JSON 数据,包含从目标网页提取的标题。

6. 高级功能:动态渲染页面

如果需要爬取动态渲染的页面(如 JavaScript 生成的内容),可以使用 Symfony Panther 插件。以下是一个简单的示例:

安装 Symfony Panther
bash 复制代码
composer require symfony/panther
修改爬虫服务:
php 复制代码
<?php
namespace app\service;

use Symfony\Component\Panther\PantherTestCase;

class SpiderService
{
    public function crawlDynamic(string $url): array
    {
        $client = PantherTestCase::createPantherClient();
        $crawler = $client->request('GET', $url);

        // 等待页面加载完成
        $client->waitFor('.dynamic-content'); // 等待某个动态内容加载

        // 提取数据
        $titles = $crawler->filter('h1')->each(function ($node) {
            return $node->text();
        });

        return $titles;
    }
}
在控制器中调用:
php 复制代码
public function crawlDynamic(Request $request)
{
    $url = $request->get('url', 'https://example.com');
    $spider = new SpiderService();

    try {
        $data = $spider->crawlDynamic($url);
        return json([
            'code' => 0,
            'msg' => 'success',
            'data' => $data,
        ]);
    } catch (\Exception $e) {
        return json([
            'code' => 500,
            'msg' => $e->getMessage(),
        ]);
    }
}

7. 总结

通过 webmanGuzzleHTTPSymfony Panther,你可以轻松实现高性能的爬虫功能:

  • 使用 GuzzleHTTP 爬取静态页面。
  • 使用 Symfony Panther 爬取动态渲染的页面。
  • 结合 webman 的路由和控制器,快速构建爬虫 API。

根据实际需求,可以进一步优化爬虫的性能和功能,例如:

  • 使用队列异步处理爬取任务。
  • 添加代理和用户代理(User-Agent)支持。
  • 实现分布式爬虫架构。
相关推荐
卜及中3 分钟前
【Go语言快速上手】第一部分:函数与错误处理
开发语言·后端·算法·golang
大猫会长23 分钟前
.bash_profile一些笔记
开发语言·bash
eqwaak037 分钟前
2025年2月28日全球科技信息差:技术革新、市场震荡与认知重构
开发语言·人工智能·科技·学习·重构
一匹电信狗1 小时前
C/C++内存管理:深入理解new和delete
c语言·开发语言·c++·ide·算法·visualstudio
zhongpz1 小时前
数据结构--队列(C语言实现)
c语言·开发语言·数据结构
MYX_3091 小时前
Python 编程题 第四节:斐波那契数列、列表的复制、暂停后输出、成绩评级、统计字符
开发语言·python·学习
东方巴黎~Sunsiny2 小时前
FastExcel vs EasyExcel vs Apache POI:三者的全面对比分析
java·开发语言·python·apache
上官-王野2 小时前
用win+python+pycharm 开发一个项目,负责档案审核
开发语言·python·pycharm
lally.2 小时前
php序列化与反序列化
android·开发语言·php
馨谙2 小时前
java中代理模式 之 jdk动态代理模式
java·开发语言·代理模式