高性能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)支持。
  • 实现分布式爬虫架构。
相关推荐
Caco_D1 小时前
一行代码抓遍全网 20 个热榜!Aneiang.Pa 4.0 发布 — 极简 .NET 爬虫库
爬虫·.net
两个人的幸福2 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
BingoGo4 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack4 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982075 天前
PHP 扩展——从入门到理解
php
太岁又沐风5 天前
复现并修掉ART hook框架 Pine 调用原方法时的偶发 SIGSEGV
爬虫
鹏仔先生6 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
LDR0066 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术6 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园6 天前
C++20 Modules 模块详解
java·开发语言·spring