zrashwani / arachnid
用于找到指定网站上所有唯一内部页面的爬虫
Requires
- php: >=7.2.0
- ext-spl: *
- fabpot/goutte: ^4.0
- guzzlehttp/psr7: ^1.4
- psr/log: ^1.1
- symfony/panther: ^1.0
- tightenco/collect: ^v8.34
Requires (Dev)
- dbrekelmans/bdi: ^0.3.0
- monolog/monolog: ^1.22
- phpunit/phpunit: ^7.5|^8.5|^9.2
- squizlabs/php_codesniffer: ^3.5
- symfony/var-dumper: ^v4.4
This package is not auto-updated.
Last update: 2024-09-16 16:27:07 UTC
README
此库将爬取给定网站上找到的所有唯一内部链接,直到达到指定的最大页面深度。
此库使用symfony/panther和FriendsOfPHP/Goutte库抓取网站页面并提取主要SEO相关信息,包括:title
、h1元素
、h2元素
、statusCode
、contentType
、meta描述
、meta关键词
和canonicalLink
。
此库基于Zeid Rashwani在这里的原始博客文章
http://zrashwani.com/simple-web-spider-php-goutte
Josh Lockhart在得到许可的情况下,将原始博客文章的代码(与Packagist兼容)进行了修改,并更新了语法以符合PSR-2编码标准。
赞助商
安装方法
您可以使用Composer安装此库。将以下内容添加到您的composer.json
文件中
{
"require": {
"zrashwani/arachnid": "dev-master"
}
}
然后运行composer install
。
入门指南
基本用法
以下是一个快速示例,演示如何爬取一个网站
<?php require 'vendor/autoload.php'; $url = 'http://www.example.com'; $linkDepth = 3; // Initiate crawl, by default it will use http client (GoutteClient), $crawler = new \Arachnid\Crawler($url, $linkDepth); $crawler->traverse(); // Get link data $links = $crawler->getLinksArray(); //to get links as objects use getLinks() method print_r($links);
启用无头浏览器模式
可以启用无头浏览器模式,这样它将使用背景中的Chrome引擎,这对于获取基于JavaScript的网站的页面内容很有用。
enableHeadlessBrowserMode
方法将用于抓取的适配器设置为基于Symfony Panther库的PantherChromeAdapter
$crawler = new \Arachnid\Crawler($url, $linkDepth); $crawler->enableHeadlessBrowserMode() ->traverse() ->getLinksArray();
为了使用此功能,您需要在您的计算机上安装chrome-driver,您可以使用dbrekelmans/browser-driver-installer
来本地安装chromedriver
composer require --dev dbrekelmans/bdi
./vendor/bin/bdi driver:chromedriver drivers
高级用法
通过在构造函数中指定选项数组或创建具有所需选项的Http客户端抓取器,设置底层http客户端的附加选项
<?php use \Arachnid\Adapters\CrawlingFactory; //third parameter is the options used to configure http client $clientOptions = ['auth_basic' => array('username', 'password')]; $crawler = new \Arachnid\Crawler('http://github.com', 2, $clientOptions); //or by creating and setting scrap client $options = array( 'verify_host' => false, 'verify_peer' => false, 'timeout' => 30, ); $scrapperClient = CrawlingFactory::create(CrawlingFactory::TYPE_HTTP_CLIENT, $options); $crawler->setScrapClient($scrapperClient);
您可以将一个符合PSR-3的日志对象注入到爬虫中,以监控爬虫活动(如Monolog)
<?php $crawler = new \Arachnid\Crawler($url, $linkDepth); // ... initialize crawler //set logger for crawler activity (compatible with PSR-3) $logger = new \Monolog\Logger('crawler logger'); $logger->pushHandler(new \Monolog\Handler\StreamHandler(sys_get_temp_dir().'/crawler.log')); $crawler->setLogger($logger); ?>
您可以通过使用filterLinks
方法指定回调闭包来设置爬虫只访问具有特定标准的页面
<?php //filter links according to specific callback as closure $links = $crawler->filterLinks(function($link) { //crawling only links with /blog/ prefix return (bool)preg_match('/.*\/blog.*$/u', $link); }) ->traverse() ->getLinks();
您可以使用LinksCollection
类获取有关链接的简单统计信息,如下所示
<?php $links = $crawler->traverse() ->getLinks(); $collection = new LinksCollection($links); //getting broken links $brokenLinks = $collection->getBrokenLinks(); //getting links for specific depth $depth2Links = $collection->getByDepth(2); //getting external links inside site $externalLinks = $collection->getExternalLinks();
如何贡献
- 分叉此存储库
- 为每个功能或改进创建一个新的分支
- 将您的代码更改与相应的单元测试一起应用
- 从每个功能分支发送拉取请求
将新功能或改进分开到单独的功能分支,并为每个分支发送拉取请求非常重要。这允许我分别审查和合并新功能或改进。
所有拉取请求都必须遵守PSR-2标准。
系统需求
- PHP 7.2.0+
作者
- Josh Lockhart https://github.com/codeguy
- Zeid Rashwani http://zrashwani.com
许可证
MIT公共许可证