larra-press / blog-poster
基于Laravel的博客自动生成海报。配置爬虫从选定的第三方资源获取数据,测试它,设置任务并享受。
Requires
- php: >=7.2
- ext-json: *
- illuminate/support: ^6.0|^7.0|^8.0
- intervention/image: ^2.6
- spatie/laravel-enum: ^2.5
- symfony/css-selector: ^5.3
- symfony/dom-crawler: ^5.3
Requires (Dev)
- orchestra/testbench: ^4.0|^5.0|^6.0
- phpunit/phpunit: ^8.4|^9.0
This package is auto-updated.
Last update: 2024-09-29 05:56:52 UTC
README
LarraPress BlogPoster
从第三方来源自动抓取,自动发布到数据库,下载媒体文件到您的存储!
关于包
此包由 Alexey Khachatryan 为个人使用开发,但后来作者决定将其公开为全球使用的包,并创建了 LarraPress 项目。该项目将帮助开发者创建强大的博客并使用第三方包来更好地拥有博客。此包的意义是从第三方来源抓取文章并发布到您的博客上。由于这是Alpha版本,还有很多需要添加和修复的地方。请随时报告错误、提问和创建PR。
到目前为止,此包有以下功能
- 从第三方资源抓取帖子
- 下载选定的媒体文件
- 从抓取的文章中删除无用元素
- 通过替换HTML标签属性值与懒加载媒体文件一起工作
- 检测重复项
- 抓取多值元素,如文章标签
- 创建缩略图
- 在发布前测试任务
安装
composer require larra-press/blog-poster
配置
发布包资源
php artisan vendor:publish --tag=larrapress-blog-poster
添加路由
LarraPress\BlogPoster\Facades\BlogPoster::routes();
注意!这些路由必须在某些 auth 中间件下添加,以防止任何人编辑您的博客海报。例如
Route::middleware('auth', function (){ LarraPress\BlogPoster\Facades\BlogPoster::routes(); });
运行迁移,创建所需表
php artisan migrate
创建您的爬取任务
您可以为所有将要创建的任务创建一个爬取任务类,或者为每个爬取任务创建不同的任务类。创建一个适用于所有爬取任务的爬取任务类
php artisan make:scraping_job ScrapingJobName
或者您可以为CNN或其他您想要的目标创建一个专门的作业
php artisan make:scraping_job ScrapingCNNSource
无论您如何称呼它们,但如何使用它们。
队列
由于网站爬取作业需要一些时间才能完成,我们使用laravel队列以正确工作。如果您不想使用队列,可以覆盖父ScrapingJob类:\LarraPress\BlogPoster\Jobs\ScrapingJob并移除queueable特性和接口。
设置您的第一个爬取任务
ScrapingJob类处理带有所有配置的ScrapingJobModel。要创建您的爬取任务,请转到仪表板。仪表板的URL取决于您如何以及在哪里放置其路由。如果您不确定它们在哪里,请运行此命令
php artisan route:list # on UNIX machines you can filter by adding "| grep blog-poster" without quotation marks
- 名称 - 源名称,仅为您作为提示
- 源 - 包含文章/帖子的网页的完整URL。帖子列表
- 图标 - 源图标。您可以手动在此处放置一些图标URL,或者点击“解析”按钮来获取它
- 列表中的标识符 - 列表中单个帖子的选择器。您需要放入锚的选择器
- 类别 - 告诉系统您希望将来自此源的帖子发布到哪个类别
- 每日限制 - 一些源发布了很多文章。您可以为此源设置每日限制
- 是草稿 - 爬取作业的状态。当您进行测试或决定暂停从该源爬取时很有用
每篇帖子/文章都有标题、正文、图片(缩略图)、标签等。我们在这里称之为文章属性。如果您想解析标题、正文和图片,您需要创建3个文章属性。
在这个框中,您可以看到3个标签页
属性主配置 - 属性信息的基础。它包含
- 作为缩略图 - 如果您为某个图片设置了选择器并希望将其设置为缩略图,请启用它。请注意,实际文件不会下载。要同时获得完整图片和缩略图,您需要创建两个文章属性
- 是文件 - 让爬虫知道它必须下载选择器的内容
- 是HTML - 对于文章正文,您可以使用HTML获取评论或其他不良内容
- 属性名称 - 此名称将与爬虫一起处理,然后传递到ScrapingJob类中,您可以在其中对其进行操作。它将是属性的索引。
- 属性选择器 - 属性的CSS选择器
- 属性类型 - 目前有3种类型:数组、URL和默认。如果您想爬取图像或某些文件,请将类型设置为URL。这样,您就告诉爬虫它是一个URL。有时可能会有不完整的URL,例如:/path/to/image.jpg 如果您想爬取文章标签(有许多标签),请使用数组类型。这样,您就告诉爬虫具有此选择器的文章中有许多元素,并且所有这些元素都必须被爬取
- 自定义标签属性 - 现代博客中有懒加载。因此,媒体的真正URL不会在SRC属性中,而是在SRCSET中。在这里设置srcset以从不同的属性获取URL。
您可以在原始文章正文中找到需要删除的元素。例如注入的广告或某些推荐链接。只需创建一个新的忽略属性并添加您想要从正文或任何地方删除的HTML标签的选择器。
如果您想要爬取的文章正文具有懒加载的媒体,则可以使用此功能。与属性主配置标签页中的“自定义标签属性”字段不同,此功能将在正文或任何地方工作。例如,如果您想要爬取单个图像并从自定义属性中获取URL,则使用“自定义标签属性”。如果您想要爬取文章正文,但其中包含具有懒加载的媒体,则需要使用它。这两个功能之间的区别是,自定义标签属性针对具有特定选择器的单个元素,而替换元素功能针对具有特定选择器的元素中的子元素。
运行爬取作业
在创建爬取作业类和包含所有配置的模型后,您可以开始爬取过程。只需分发ScrapingJob作业并将新创建的模型传递给作业构造函数。
待办事项
- 处理爬虫错误并在测试时将其传递给用户
- 处理爬虫的所有错误并适当记录
- 在仪表板上创建队列管理以检查爬取队列的健康状况和状态
- 编写测试
- 编写完整文档
安全
如果您发现任何与安全相关的问题,请发送电子邮件至 alexey.khachatryan@gmail.com 而不是使用问题跟踪器。
鸣谢
使用到的包
版本控制
版本示例:1.0.0 包版本分为三部分
- 全局更新
- 特性
- 错误修复