spekulatius/phpscraper

PHPScraper,以简洁为核心。查看tests/以获取更多示例。

3.0.0 2024-04-09 15:34 UTC

README

Unit Tests Total Downloads Latest Version License

完整文档,请访问 phpscraper.de.

PHPScraper是一个多功能的PHP网络实用工具。其主要目标是简化从网站提取信息的过程,让您能够专注于完成任务,而无需陷入选择器、数据结构准备和转换的复杂性。

在内部,它使用

有关更多详细信息,请参阅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

💪 路线图

未来的开发被组织成里程碑。版本发布遵循semver

v1: 构建第一个稳定版本

  • 改进文档和示例。
  • 更好地组织代码(将网站移动到单独的仓库等)
  • 添加对源和一些典型文件类型的支持。

v2: 服务升级

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

您可以在 此处 找到测试。测试页面 公开可用

MISC:问题想法贡献变更日志升级指南许可证