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]);
将超时设置为零将禁用它。
禁用SSL
虽然不推荐,但可能需要禁用SSL检查。您可以使用以下方式实现:
$web->setConfig(['disable_ssl' => true]);
您可以多次调用setConfig
。它会存储配置并将其与之前的设置合并。在不太可能的情况下,当取消设置值时,请注意这一点。
🚀 使用 Composer 安装
composer require spekulatius/phpscraper
安装完成后,Composer 自动加载器将自动获取该包。如果您使用的是常见的 PHP 应用程序或框架,如 Laravel 或 Symfony,您现在就可以开始抓取了 🚀
如果不是,或者您正在构建一个独立抓取器,请将自动加载器包含在文件顶部 vendor/
目录中
<?php require __DIR__ . '/vendor/autoload.php'; // ...
现在您可以使用文档网站上的任何示例或从 tests/
文件夹 中的示例。
请考虑用一颗星或 赞助 支持PHPScraper。
composer thanks
谢谢 💪
✅ 测试
该库附带一个 PHPUnit 测试套件。要从项目文件夹中运行测试,请执行以下命令
composer test