ToB企服应用市场:ToB评测及商务社交产业平台

标题: 高性能PHP框架webman爬虫引擎插件,怎样爬取数据 [打印本页]

作者: 火影    时间: 昨天 15:06
标题: 高性能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 框架中,结合爬虫引擎插件(如 GuzzleHTTP 或 Symfony Panther)可以轻松实现数据爬取。以下是一个完整的示例,展示怎样利用 webman 和 GuzzleHTTP 插件来爬取网页数据。
1. 安装依赖

首先,确保你已经安装了 webman 框架和 GuzzleHTTP 插件。
  1. composer create-project workerman/webman
  2. cd webman
  3. composer require guzzlehttp/guzzle
复制代码
2. 创建爬虫服务

在 webman 中,可以创建一个服务类来处理爬虫逻辑。以下是一个简朴的爬虫服务示例:
  1. <?php
  2. namespace app\service;
  3. use GuzzleHttp\Client;
  4. use GuzzleHttp\Exception\GuzzleException;
  5. class SpiderService
  6. {
  7.     protected $client;
  8.     public function __construct()
  9.     {
  10.         // 初始化 GuzzleHTTP 客户端
  11.         $this->client = new Client([
  12.             'timeout' => 10, // 设置超时时间
  13.         ]);
  14.     }
  15.     /**
  16.      * 爬取网页内容
  17.      *
  18.      * @param string $url 目标网址
  19.      * @return string 返回网页内容
  20.      * @throws GuzzleException
  21.      */
  22.     public function crawl(string $url): string
  23.     {
  24.         $response = $this->client->request('GET', $url);
  25.         return $response->getBody()->getContents();
  26.     }
  27.     /**
  28.      * 解析 HTML 数据
  29.      *
  30.      * @param string $html 网页内容
  31.      * @return array 返回解析后的数据
  32.      */
  33.     public function parseHtml(string $html): array
  34.     {
  35.         $dom = new \DOMDocument();
  36.         @$dom->loadHTML($html); // 忽略 HTML 错误
  37.         $xpath = new \DOMXPath($dom);
  38.         // 示例:提取所有标题
  39.         $titles = [];
  40.         $nodes = $xpath->query('//h1'); // 查找所有 <h1> 标签
  41.         foreach ($nodes as $node) {
  42.             $titles[] = $node->nodeValue;
  43.         }
  44.         return $titles;
  45.     }
  46. }
复制代码
3. 创建控制器

在 webman 中,控制器用于处理 HTTP 哀求。以下是一个简朴的控制器示例,用于调用爬虫服务并返回结果:
  1. <?php
  2. namespace app\controller;
  3. use app\service\SpiderService;
  4. use support\Request;
  5. class SpiderController
  6. {
  7.     public function crawl(Request $request)
  8.     {
  9.         $url = $request->get('url', 'https://example.com'); // 获取 URL 参数
  10.         $spider = new SpiderService();
  11.         try {
  12.             // 爬取网页内容
  13.             $html = $spider->crawl($url);
  14.             // 解析 HTML 数据
  15.             $data = $spider->parseHtml($html);
  16.             // 返回 JSON 响应
  17.             return json([
  18.                 'code' => 0,
  19.                 'msg' => 'success',
  20.                 'data' => $data,
  21.             ]);
  22.         } catch (\Exception $e) {
  23.             return json([
  24.                 'code' => 500,
  25.                 'msg' => $e->getMessage(),
  26.             ]);
  27.         }
  28.     }
  29. }
复制代码
4. 设置路由

在 webman 中,路由用于将哀求映射到控制器。打开 config/route.php 文件,添加以下路由:
  1. <?php
  2. use Webman\Route;
  3. Route::get('/crawl', [app\controller\SpiderController::class, 'crawl']);
复制代码
5. 运行并测试

启动 webman 服务:
  1. php start.php start
复制代码
访问以下 URL 测试爬虫功能:
  1. http://127.0.0.1:8787/crawl?url=https://example.com
复制代码
如果齐备正常,你会看到返回的 JSON 数据,包含从目的网页提取的标题。
6. 高级功能:动态渲染页面

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

  1. composer require symfony/panther
复制代码
修改爬虫服务:

  1. <?php
  2. namespace app\service;
  3. use Symfony\Component\Panther\PantherTestCase;
  4. class SpiderService
  5. {
  6.     public function crawlDynamic(string $url): array
  7.     {
  8.         $client = PantherTestCase::createPantherClient();
  9.         $crawler = $client->request('GET', $url);
  10.         // 等待页面加载完成
  11.         $client->waitFor('.dynamic-content'); // 等待某个动态内容加载
  12.         // 提取数据
  13.         $titles = $crawler->filter('h1')->each(function ($node) {
  14.             return $node->text();
  15.         });
  16.         return $titles;
  17.     }
  18. }
复制代码
在控制器中调用:

  1. public function crawlDynamic(Request $request)
  2. {
  3.     $url = $request->get('url', 'https://example.com');
  4.     $spider = new SpiderService();
  5.     try {
  6.         $data = $spider->crawlDynamic($url);
  7.         return json([
  8.             'code' => 0,
  9.             'msg' => 'success',
  10.             'data' => $data,
  11.         ]);
  12.     } catch (\Exception $e) {
  13.         return json([
  14.             'code' => 500,
  15.             'msg' => $e->getMessage(),
  16.         ]);
  17.     }
  18. }
复制代码
7. 总结

通过 webman 和 GuzzleHTTP 或 Symfony Panther,你可以轻松实现高性能的爬虫功能:

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4