spekulatius / phpscraper
PHPScraper,以简洁性为核心。详见tests/目录中的更多示例。
Requires
- php: ^8.1
- ext-intl: *
- donatello-za/rake-php-plus: ^1.0.15
- league/uri: ^7.0
- symfony/browser-kit: ^6.0 || ^7.0
- symfony/css-selector: ^6.0 || ^7.0
- symfony/dom-crawler: ^5.4 || ^6.0 || ^7.0
- symfony/http-client: ^6.0 || ^7.0
Requires (Dev)
- illuminate/collections: ^8.0.0|^9.0.0
- laravel/pint: ^1.0
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^8.0.0|^9.0.0
- rector/rector: ^0.19
- symfony/thanks: ^1.0.0
- symfony/var-dumper: ^6.0
This package is auto-updated.
Last update: 2024-09-09 16:44:23 UTC
README
欲获取完整文档,请访问 phpscraper.de.
PHPScraper 是一款多功能的 PHP 网络实用工具。其主要目标是简化从网站提取信息的过程,让您能够专注于完成任务,而无需陷入选择器、数据结构准备和转换的复杂性。
内部,它使用
- BrowserKit(之前为 Goutte)来访问网络
- League/URI 来处理 URL
- donatello-za/rake-php-plus 来提取和分析关键词
详见 composer.json 获取更多详细信息。
⏲️ PHPScraper 5 分钟速成
以下是关于库工作方式的几个印象。更多示例可以在 项目网站 上找到。
基础:作为属性或方法的灵活调用
所有抓取功能都可以通过函数调用或属性调用访问。例如,标题可以通过两种方式访问
// Prep $web = new \Spekulatius\PHPScraper\PHPScraper; $web->go('https://google.com'); // Returns "Google" echo $web->title; // Also returns "Google" echo $web->title();
🔋 电池组已包括:元数据、链接、图片、标题、内容、关键词、...
已覆盖了许多常见用例。您可以为各种 HTML 标签找到准备好的提取器,包括有趣的属性。您可以根据需要过滤和组合这些提取器。在某些情况下,您可以选择获取简单或详细版本,这里以 linksWithDetails
为例
$web = new \Spekulatius\PHPScraper\PHPScraper; // Contains: // <a href="https://placekitten.com/456/500" rel="ugc"> // <img src="https://placekitten.com/456/400"> // <img src="https://placekitten.com/456/300"> // </a> $web->go('https://test-pages.phpscraper.de/links/image-urls.html'); // Get the first link on the page and print the result print_r($web->linksWithDetails[0]); // [ // 'url' => 'https://placekitten.com/456/500', // 'protocol' => 'https', // 'text' => '', // 'title' => null, // 'target' => null, // 'rel' => 'ugc', // 'image' => [ // 'https://placekitten.com/456/400', // 'https://placekitten.com/456/300' // ], // 'isNofollow' => false, // 'isUGC' => true, // 'isSponsored' => false, // 'isMe' => false, // 'isNoopener' => false, // 'isNoreferrer' => false, // ]
如果页面上没有匹配的元素(此处为链接),则返回空数组。如果方法通常返回字符串,则可能返回 null
。如 follow_redirects
等详细信息是可选的配置参数(见下文)。
这些方法可以覆盖 DOM 的大部分内容
方法列表及示例代码的完整列表可在 phpscraper.de 上找到。更多示例在 tests 中。
下载文件
除了处理页面上的内容,您还可以使用 fetchAsset
下载文件
// Absolute URL $csvString = $web->fetchAsset('https://test-pages.phpscraper.de/test.csv'); // Relative URL after navigation $csvString = $web ->go('https://test-pages.phpscraper.de/meta/lorem-ipsum.html') ->fetchAsset('/test.csv');
您只需将内容写入文件或云存储。
处理 RSS 源、sitemap.xml
等。
PHPScraper可以帮助收集如RSS订阅、sitemap.xml
条目和静态搜索索引等数据源。这在决定爬取下一页或者构建网站页面列表时非常有用。
在此,我们将站点地图处理成一组FeedEntry
-DTOs
(new \Spekulatius\PHPScraper\PHPScraper) ->go('https://phpscraper.de') ->sitemap // array(131) { // [0]=> // object(Spekulatius\PHPScraper\DataTransferObjects\FeedEntry)#165 (3) { // ["title"]=> // string(0) "" // ["description"]=> // string(0) "" // ["link"]=> // string(22) "https://phpscraper.de/" // } // [1]=> // ...
在应用后处理时,您可以回退到底层的*Raw
方法。
处理CSV、XML和JSON文件以及URL
PHPScraper自带对CSV、XML和JSON文件以及URL的处理方法
parseJson
parseXml
parseCsv
parseCsvWithHeader
(使用第一行生成关联数组)
每个方法都可以处理字符串和URL
// Parse JSON into array: $json = $web->parseJson('[{"title": "PHP Scraper: a web utility for PHP", "url": "https://phpscraper.de"}]'); // [ // 'title' => 'PHP Scraper: a web utility for PHP', // 'url' => 'https://phpscraper.de' // ] // Fetch and parse CSV into a simple array: $csv = $web->parseCsv('https://test-pages.phpscraper.de/test.csv'); // [ // ['date', 'value'], // ['1945-02-06', 4.20], // ['1952-03-11', 42], // ] // Fetch and parse CSV with first row as header into an asso. array structure: $csv = $web->parseCsvWithHeader('https://test-pages.phpscraper.de/test.csv'); // [ // ['date' => '1945-02-06', 'value' => 4.20], // ['date' => '1952-03-11', 'value' => 42], // ]
CSV解析的附加参数,如分隔符、封装和转义也是可能的。
还有更多!
在PHPScraper网站和测试中有很多示例。
如果您更喜欢通过实践学习,请检查playground.php
。您可以通过以下步骤启动它
$ git clone git@github.com:spekulatius/PHPScraper.git && composer update
💪 路线图
v1: 构建第一个稳定版本
- 改进文档和示例。
- 更好地组织代码(将网站移至单独的存储库等)
- 添加对数据源和某些典型文件类型的支持。
v2: 服务升级
- 从Goutte切换到Symfony BrowserKit。Goutte已被存档。
v3: 扩展功能并涵盖更多类型
- 扩展以解析更广泛的类型、元素、嵌入式内容等。
- 通过缓存和并发获取资源来提高性能
- 对解析方法进行一些小改进
v4: 扩展以提供更多关于在PHPScraper之上构建自定义抓取器的指导
待定。
😍 赞助商
PHPScraper由以下赞助商赞助
有了您的支持,PHPScraper可以成为PHP网络瑞士军刀。如果您觉得PHPScraper对您的工作有帮助,请考虑赞助或捐赠。谢谢💪
⚙️ 配置(可选)
如果需要,您可以使用以下配置选项
用户代理
您可以使用setConfig
设置浏览器代理
$web->setConfig([ 'agent' => 'Mozilla/5.0 (X11; Linux x86_64; rv:107.0) Gecko/20100101 Firefox/107.0' ]);
默认为Mozilla/5.0 (compatible; PHP Scraper/1.x; +https://phpscraper.de)
。
代理支持
您可以使用setConfig
配置代理支持
$web->setConfig(['proxy' => 'http://user:password@127.0.0.1:3128']);
超时
您可以使用setConfig
设置timeout
$web->setConfig(['timeout' => 15]);
将超时设置为0将禁用它。
禁用SSL
虽然不推荐,但可能需要禁用SSL检查。您可以使用以下方法实现
$web->setConfig(['disable_ssl' => true]);
您可以多次调用setConfig
。它存储配置并将它与之前的设置合并。在不太可能的情况下取消设置值时应注意这一点。
🚀 使用Composer安装
composer require spekulatius/phpscraper
安装完成后,Composer自动加载器将抓取该包。如果你使用的是Laravel或Symfony等常见PHP应用程序或框架,现在就可以开始抓取了 🚀
如果不使用或你正在构建独立的抓取器,请在文件顶部将自动加载器包含在vendor/
中
<?php require __DIR__ . '/vendor/autoload.php'; // ...
现在你可以使用文档网站上的任何示例或从tests/
文件夹中的示例。
请考虑通过星级或赞助支持PHPScraper
composer thanks
谢谢 💪
✅ 测试
该库附带PHPUnit测试套件。要运行测试,请在项目文件夹中运行以下命令
composer test