gregpriday / laravel-zyte-api
一个用于与Zyte的网页抓取API无缝集成的Laravel包,提供提取原始HTML、浏览器渲染的HTML和结构化文章内容等功能。
Requires
- php: ^8.1
- caseyamcl/guzzle_retry_middleware: ^2.9
- guzzlehttp/guzzle: ^7.8
- illuminate/contracts: ^11.0
- league/html-to-markdown: ^5.1
- spatie/laravel-package-tools: ^1.14.0
- symfony/dom-crawler: ^7.0
Requires (Dev)
- larastan/larastan: ^2.0.1
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.8
- orchestra/testbench: ^8.8
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- spatie/laravel-ray: ^1.26
README
⚠️ 重要通知 ⚠️:此包目前处于早期开发阶段,每次新版本发布可能会引入破坏性更改。虽然我们努力保持稳定性,但用户在升级到新版本时应该谨慎,并仔细查看变更日志。欢迎贡献和反馈,以帮助提高包的稳定性和功能性。
Laravel Zyte API是一个强大的Laravel包,可以将Zyte的网页抓取能力无缝集成到您的Laravel应用程序中。该包注重灵活性和易用性,简化了使用Zyte高级数据提取API从网页中提取数据的过程。
功能
- 通过简单的Laravel外观轻松集成Zyte API服务
- 灵活的
extract
方法,用于并发获取多个URL - 支持提取原始HTML、浏览器渲染的HTML、结构化文章数据等
- 可自定义并发,以高效处理批量请求
- 内置重试逻辑,用于鲁棒地处理API请求失败
- 利用GuzzleHttp与Zyte API进行高效通信
- 提供
Processors
类,包含用于处理提取数据的实用方法,例如将HTML转换为干净的Markdown
安装
通过在您的Laravel项目目录中运行以下命令通过Composer安装此包
composer require gregpriday/laravel-zyte-api
配置
要配置您的Zyte API密钥、代理和其他设置,请发布包配置文件
php artisan vendor:publish --provider="GregPriday\ZyteApi\ZyteApiServiceProvider"
此命令将在您的项目中创建一个config/zyte.php
文件。打开此文件以查看可用的配置选项。
接下来,将以下条目添加到您的.env
文件中
ZYTE_API_KEY=your-zyte-api-key-here
ZYTE_API_CONCURRENCY=5
ZYTE_PROXY=your-proxy-url-here
确保用您的实际Zyte API密钥替换your-zyte-api-key-here
,并用适当的代理URL替换your-proxy-url-here
。
用法
提取数据
要从URL或多个URL中提取数据,请使用extract
方法
use GregPriday\ZyteApi\Facades\ZyteApi; $url = 'https://example.com'; $response = ZyteApi::extract($url, ['browserHtml' => true]); // Access the browser-rendered HTML echo $response['browserHtml']; $urls = [ 'https://example.com/article1', 'https://example.com/article2', 'https://example.com/article3', ]; $responses = ZyteApi::extract($urls, ['article' => true]); // Access the extracted article data for each URL foreach ($responses as $url => $articleData) { echo "URL: $url\n"; echo "Headline: {$articleData['headline']}\n"; echo "Article Body: {$articleData['articleBody']}\n"; // ... }
extract
方法接受以下参数
$urls
(数组|string):要从中提取数据的单个URL或URL数组。$args
(数组):用于自定义提取过程的附加请求参数。有关可用选项,请参阅Zyte API文档。$processCallback
(callable|null):一个可选的回调函数,用于处理每个API响应。如果未提供,将返回原始API响应。
处理错误
该包包含内置的重试逻辑来处理API请求失败。如果请求失败,它将自动重试最多5次,然后返回错误消息。您可以通过修改ZyteApi
构造函数中的GuzzleRetryMiddleware
配置来自定义重试行为。
使用Zyte代理
要使用Zyte代理进行请求,请使用ZyteClient
类
use GregPriday\ZyteApi\Proxy\ZyteClient; $client = app(ZyteClient::class); $response = $client->get('https://example.com'); $httpResponseBody = $response->getBody()->getContents(); // ...
确保在您的.env
文件中将ZYTE_PROXY
值设置为适当的代理URL。
处理器
该包包含一个Processors
类,提供用于处理提取数据的实用方法。例如,可以使用htmlToCleanMarkdown
方法将HTML内容转换为干净的Markdown格式。
use GregPriday\ZyteApi\Facades\ZyteApi; use GregPriday\ZyteApi\Processors; $urls = [ 'https://example.com/article1', 'https://example.com/article2', 'https://example.com/article3', ]; $responses = ZyteApi::extract($urls, ['article' => true], function ($response) { $articleData = $response['article']; // Convert article HTML content to Markdown $articleData['articleBodyMarkdown'] = Processors::htmlToCleanMarkdown($articleData['articleBodyHtml']); return $articleData; }); // Access the extracted article data and converted Markdown content for each URL foreach ($responses as $url => $articleData) { echo "URL: $url\n"; echo "Headline: {$articleData['headline']}\n"; echo "Article Body (HTML): {$articleData['articleBodyHtml']}\n"; echo "Article Body (Markdown): {$articleData['articleBodyMarkdown']}\n"; // ... }
测试
该软件包包含PHPUnit测试以确保其功能。要运行测试,请导航到您的项目目录并执行
vendor/bin/phpunit
请确保正确配置测试环境,以避免在测试期间调用Zyte的API。
贡献
欢迎为Laravel Zyte API软件包做出贡献!如果您发现任何错误,有改进建议,或希望添加新功能,请提交pull request。确保您的贡献遵循项目的编码标准和规范。
许可证
Laravel Zyte API软件包是开源软件,根据MIT许可证授权。