hashbangcode / sitemap_checker
一个用于下载、解析和爬取sitemap.xml文件的PHP库。
Requires
- php: >=8.1
- chrome-php/chrome: ^1.8
- guzzlehttp/guzzle: ^7.5
- guzzlehttp/promises: ^2.0
- symfony/config: ^6.2
- symfony/console: ^6.2
- symfony/dependency-injection: ^6.2
- symfony/framework-bundle: ^6.2
- symfony/http-kernel: ^6.2
- symfony/yaml: ^6.2
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.0
README
一个用于下载、解析和爬取sitemap.xml文件的PHP库。
如果sitemap.xml文件被gzip压缩,则文件将被解压,并读取内容。
安装
将PHP文件下载到目录中并运行composer install
。这将设置应用程序运行所需的所有内容。
用法
在命令行中运行应用程序使用以下命令。
php application.php sitemap-checker:run https://www.example.com/sitemap.xml
这将下载sitemap.xml文件,在开始爬取之前告知它检测到的URL数量。
您还可以使用缩写来运行相同的命令
php application.php sc:run https://www.example.com/sitemap.xml
一旦爬取完成,命令将打印出结果。
选项
此工具存在多个选项。
结果输出
要更改返回的结果类型,您可以提供--result-file
选项,或使用短选项-r
。
以下渲染类型可用
- 纯文本,默认渲染器(逐行打印结果)。
- CSV
- JSON
- XML
- HTML
例如,要将结果输出为csv,可以提供如下选项。
php application.php sc:run -r results.csv https://www.example.com/sitemap.xml
这将自动触发csv结果渲染路径,并将结果渲染为csv文件。
如果没有设置此选项,工具将使用“纯文本”渲染将结果打印到命令行。
限制
--limit
选项(或短选项-l
)仅防止工具检查超过此限制的数量。
例如,这将只处理10个结果,无论找到多少URL。
php application.php sc:run -l 10 https://www.example.com/sitemap.xml
引擎
--engine
选项(或短选项-e
)更改使用的检查引擎类型。
选项包括
- 'guzzle' : (默认) 使用Guzzle承诺运行sitemap检查器。
- 'chrome' : 使用无头Chrome运行sitemap检查器。要运行此功能,您首先需要将chrome二进制文件添加到位置
./chrome/chrome
(即在包内部)。
例如,要将sitemap检查器引擎更改为使用无头Chrome,请使用以下命令。
php application.php sc:run -e chrome https://www.example.com/sitemap.xml
排除
使用--exclude
标志(或短选项-x
)传递要排除的URL列表。这将阻止URL被添加到集合并检查。这可以是一系列要排除的URL的逗号分隔列表。也可以使用通配符来防止使用某些内部URL。
一些示例
防止使用路径https://www.example.com/some-page
。
php application.php sc:run https://www.example.com/ --exclude='https://www.hashbangcode.com/some-page.html'
防止使用https://www.example.com/sub-dir1
和https://www.example.com/sub-dir2
中的任何内容
php application.php sc:run https://www.example.com/ --exclude='https://www.example.com/sub-dir1/*,https://www.hashbangcode.com/sub-dir2/*'
防止使用外部站点https://www.example2.org
上的任何内容。
php application.php sc:run https://www.example.com/ --exclude='https://www.example2.org/*'
Robots
使用--robots
标志(或短选项-t
)将robots.txt文件传递给脚本。这将下载并解析robots.txt文件,将其解析为一系列排除规则。
php application.php sc:run https://www.example.com/ --robots='https://www.example.org/robots.txt'
请注意,robots.txt解析器只会使用为User-agent
字符串*
创建的规则。
此选项可以与排除标志一起使用,以添加到爬虫排除规则。
测试
运行./vendor/bin/phpunit
以运行phpunit测试。所有Web请求都在单元测试中模拟。
运行composer run test-coverage
以运行单元测试并生成代码覆盖率报告。此报告添加到应用程序根目录下的.build
目录。
对于覆盖率报告,您需要将以下内容添加到您的xdebug.ini配置文件中。
xdebug.mode=coverage
使用类示例
要将类从本项目提取出来独立使用,请执行以下操作。
<?php use Hashbangcode\SitemapChecker\Crawler\GuzzlePromiseCrawler; require __DIR__ . '/vendor/autoload.php'; // Set the engine up. $client = new \GuzzleHttp\Client(); $crawler = new \Hashbangcode\SitemapChecker\Crawler\GuzzleCrawler(); $crawler->setEngine($client); // Create a URL. $url = new \Hashbangcode\SitemapChecker\Url\Url('https://www.hashbangcode.com/'); // Crawl a single URL. $result = $crawler->processUrl($url); // Print result object. print_r($result);
待办事项
还有很多事情要做。
- 添加自动下载Chrome二进制文件的方式。
- 研究使用数据库或消息队列。
- 添加Docker容器来封装应用程序。
- 批量处理URL(即不要一次性完成所有操作)。
- 为应用程序选择更好的名称。
- 添加添加会话cookie以进行认证爬取的能力。