商务合作加微信:2230304070
学习与交流:PHP技术交流微信群
2025年 JetBrains全家桶通用激活码&账号 支持最新版本
https://www.mano100.cn/thread-1942-1-1.html
在 webman 高性能 PHP 框架中,结合爬虫引擎插件(如 GuzzleHTTP 或 Symfony Panther)可以轻松实现数据爬取。
以下是一个完整的示例,展示如何使用 webman 和 GuzzleHTTP 插件来爬取网页数据。
首先,确保你已经安装了 webman 框架和 GuzzleHTTP 插件。
composer create-project workerman/webmancd webmancomposer require guzzlehttp/guzzle》》Jetbrains Ai Assistant插件助手《《
2. 创建爬虫服务
在 webman 中,可以创建一个服务类来处理爬虫逻辑。以下是一个简单的爬虫服务示例:
<?phpnamespaceapp\service;useGuzzleHttp\Client;useGuzzleHttp\Exception\GuzzleException;classSpiderService{protected$client;publicfunction__construct(){// 初始化 GuzzleHTTP 客户端$this->client=newClient(['timeout'=>10,// 设置超时时间]);}/** * 爬取网页内容 * * @paramstring$url 目标网址 * @returnstring 返回网页内容 * @throwsGuzzleException */publicfunctioncrawl(string$url):string{$response=$this->client->request('GET',$url);return$response->getBody()->getContents();}/** * 解析 HTML 数据 * * @paramstring$html 网页内容 * @returnarray 返回解析后的数据 */publicfunctionparseHtml(string$html):array{$dom=new\DOMDocument(); @$dom->loadHTML($html);// 忽略 HTML 错误$xpath=new\DOMXPath($dom);// 示例:提取所有标题$titles=[];$nodes=$xpath->query('//h1');// 查找所有 <h1> 标签foreach($nodesas$node){$titles[]=$node->nodeValue;}return$titles;}}在 webman 中,控制器用于处理 HTTP 请求。以下是一个简单的控制器示例,用于调用爬虫服务并返回结果:
<?phpnamespaceapp\controller;useapp\service\SpiderService;usesupport\Request;classSpiderController{publicfunctioncrawl(Request$request){$url=$request->get('url','https://example.com');// 获取 URL 参数$spider=newSpiderService();try{// 爬取网页内容$html=$spider->crawl($url);// 解析 HTML 数据$data=$spider->parseHtml($html);// 返回 JSON 响应returnjson(['code'=>0,'msg'=>'success','data'=>$data,]);}catch(\Exception$e){returnjson(['code'=>500,'msg'=>$e->getMessage(),]);}}}在 webman 中,路由用于将请求映射到控制器。打开 config/route.php 文件,添加以下路由:
<?phpuseWebman\Route;Route::get('/crawl',[app\controller\SpiderController::class,'crawl']);启动 webman 服务:
php start.php start访问以下 URL 测试爬虫功能:
http://127.0.0.1:8787/crawl?url=https://example.com如果一切正常,你会看到返回的 JSON 数据,包含从目标网页提取的标题。
如果需要爬取动态渲染的页面(如 JavaScript 生成的内容),可以使用 Symfony Panther 插件。以下是一个简单的示例:
Symfony Panther:composer require symfony/panther<?phpnamespaceapp\service;useSymfony\Component\Panther\PantherTestCase;classSpiderService{publicfunctioncrawlDynamic(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;}}publicfunctioncrawlDynamic(Request$request){$url=$request->get('url','https://example.com');$spider=newSpiderService();try{$data=$spider->crawlDynamic($url);returnjson(['code'=>0,'msg'=>'success','data'=>$data,]);}catch(\Exception$e){returnjson(['code'=>500,'msg'=>$e->getMessage(),]);}}通过 webman 和 GuzzleHTTP 或 Symfony Panther,你可以轻松实现高性能的爬虫功能:
GuzzleHTTP 爬取静态页面。Symfony Panther 爬取动态渲染的页面。webman 的路由和控制器,快速构建爬虫 API。根据实际需求,可以进一步优化爬虫的性能和功能,例如:

