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]);

将超时设置为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

你可以在这里找到测试这里。测试页面是公开可用的。

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