heimrichhannot / crawler
爬取网站上的所有内部链接
Requires
- php: ^7.4|^8.0
- guzzlehttp/guzzle: ^7.2
- guzzlehttp/psr7: ^1.7
- illuminate/collections: ^8.17
- nicmart/tree: ^0.3.0
- spatie/browsershot: ^3.14
- spatie/robots-txt: ^1.0.9
- symfony/dom-crawler: ^5.2
Requires (Dev)
- phpunit/phpunit: ^9.4
- 6.0.0
- v5.x-dev
- 5.0.2
- 5.0.1
- 5.0.0
- v4.x-dev
- 4.7.6
- 4.7.5
- 4.7.4
- 4.7.3
- 4.7.2
- 4.7.1
- 4.7.0
- 4.6.9
- 4.6.8
- 4.6.7
- 4.6.6
- 4.6.5
- 4.6.4
- 4.6.3
- 4.6.2
- 4.6.1
- 4.6.0
- 4.5.0
- 4.4.3
- 4.4.2
- 4.4.1
- 4.4.0
- 4.3.2
- 4.3.1
- 4.3.0
- 4.2.0
- 4.1.7
- 4.1.6
- 4.1.5
- 4.1.4
- 4.1.3
- 4.1.2
- 4.1.1
- 4.1.0
- 4.0.5
- 4.0.4
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- 3.2.1
- 3.2.0
- 3.1.3
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.1
- 3.0.0
- v2.x-dev
- 2.8.2
- 2.8.1
- 2.7.6
- 2.7.5
- 2.7.4
- 2.7.3
- 2.7.2
- 2.7.1
- 2.7.0
- 2.6.2
- 2.6.1
- 2.6.0
- 2.5.0
- 2.4.0
- 2.3.0
- 2.2.1
- 2.2.0
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.7
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.3.1
- 1.3.0
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.1
- 1.1.0
- 1.0.2
- 1.0.1
- 1.0.0
- dev-master / 0.0.x-dev
- 0.0.1
This package is auto-updated.
Last update: 2024-08-26 16:33:52 UTC
README
spatie/crawler v2的分支,经过一些调整。仅用于内部项目。
爬取网站上的链接
此包提供了一个用于爬取网站链接的类。底层使用Guzzle承诺来并发爬取多个URL。
因为爬虫可以执行JavaScript,所以它可以爬取JavaScript渲染的网站。底层使用无头Chrome来实现这一功能。
Spatie是比利时安特卫普的一家网络设计公司。您可以在我们的网站上找到所有开源项目的概述这里。
安装
此包可以通过Composer安装
composer require spatie/crawler
使用方法
爬虫可以像这样实例化
Crawler::create() ->setCrawlObserver(<implementation of \Spatie\Crawler\CrawlObserver>) ->startCrawling($url);
传递给setCrawlObserver
的参数必须是一个实现了\Spatie\Crawler\CrawlObserver
接口的对象
/** * Called when the crawler will crawl the given url. * * @param \Spatie\Crawler\Url $url */ public function willCrawl(Url $url); /** * Called when the crawler has crawled the given url. * * @param \Spatie\Crawler\Url $url * @param \Psr\Http\Message\ResponseInterface $response * @param \Spatie\Crawler\Url $foundOn */ public function hasBeenCrawled(Url $url, $response, Url $foundOn = null); /** * Called when the crawl has ended. */ public function finishedCrawling();
执行JavaScript
默认情况下,爬虫不会执行JavaScript。这是启用JavaScript执行的方法
Crawler::create() ->executeJavaScript() ...
底层使用无头Chrome来执行JavaScript。以下是如何在您的系统上安装它的一些提示。
包将猜测Chrome在您的系统上的安装位置。您也可以手动将Chrome二进制文件的路径传递给executeJavaScript()
Crawler::create() ->executeJavaScript($pathToChrome) ...
过滤某些URL
您可以通过传递使用setCrawlProfile
-函数来告诉爬虫不要访问某些URL。该函数期望一个实现了Spatie\Crawler\CrawlProfile
-接口的对象
/* * Determine if the given url should be crawled. */ public function shouldCrawl(Url $url): bool;
此包自带三个CrawlProfiles
CrawlAllUrls
:此配置文件将爬取所有页面上的所有URL,包括外部网站的URL。CrawlInternalUrls
:此配置文件将仅爬取主机页面上的内部URL。CrawlSubdomainUrls
:此配置文件将仅爬取主机页面上的内部URL及其子域名。
设置并发请求数量
为了提高爬取速度,默认情况下,该包并发爬取10个URL。如果您想更改该数字,可以使用setConcurrency
方法。
Crawler::create() ->setConcurrency(1) //now all urls will be crawled one by one
设置最大爬取次数
默认情况下,爬虫将继续爬取,直到它爬取了提供的URL的每一页。如果您想限制爬虫应该爬取的URL数量,可以使用setMaximumCrawlCount
方法。
// stop crawling after 5 urls Crawler::create() ->setMaximumCrawlCount(5)
设置最大爬取深度
默认情况下,爬虫将继续爬取,直到它爬取了提供的URL的每一页。如果您想限制爬虫的深度,可以使用setMaximumDepth
方法。
Crawler::create() ->setMaximumDepth(2)
使用自定义爬取队列
在爬取网站时,爬虫会将要爬取的URL放入队列中。默认情况下,此队列使用内置的CollectionCrawlQueue
存储在内存中。
当一个站点非常大时,您可能希望将队列存储在其他地方,比如数据库。在这种情况下,您可以编写自己的爬取队列。
有效的爬取队列是任何实现了Spatie\Crawler\CrawlQueue\CrawlQueue
接口的类。您可以通过爬虫上的setCrawlQueue
方法传递自定义的爬取队列。
Crawler::create() ->setCrawlQueue(<implementation of \Spatie\Crawler\CrawlQueue\CrawlQueue>)
更新日志
有关最近更改的更多信息,请参阅更新日志。
贡献
有关详细信息,请参阅贡献指南。
测试
要运行测试,您首先需要在单独的终端窗口中启动包含的基于节点的服务器。
cd tests/server
npm install
./start_server.sh
服务器运行后,您可以开始测试。
vendor/bin/phpunit
安全
如果您发现任何安全相关的问题,请通过电子邮件freek@spatie.be联系,而不是使用问题跟踪器。
明信片软件
您可以使用这个包,但如果它进入您的生产环境,我们非常希望您能从您的家乡给我们寄一张明信片,并说明您正在使用我们哪个包。
我们的地址是:Spatie,Samberstraat 69D,2060 安特卫普,比利时。
我们将所有收到的明信片发布在我们的公司网站上。
致谢
支持我们
Spatie是一家位于比利时的安特卫普网络设计公司。您可以在我们的网站上找到我们所有开源项目的概述在这里。
您的业务依赖于我们的贡献吗?请与我们联系,并在Patreon上支持我们。所有承诺都将专门用于分配人员以维护和新奇事物。
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。