如何使用 Laravel 进行网络搜索?

作者 :

反应 :

评论

网络搜刮 Laravel 结合了 PHP 框架和专业库的强大功能,可以 automatiser l’extraction de données.

C’est une solution robuste pour collecter, traiter et organiser des informations en ligne. Découvrons ensemble dans cet article comment faire du 使用 Laravel 进行网页搜索.

Laravel 使用 PHP 作为引擎,提供有组织的结构和集成工具,使网络搜索更容易。
Laravel 使用 PHP 作为引擎,提供有组织的结构和集成工具,使网络搜索更容易。Cristina for Alucare.fr

使用 Laravel 进行刮擦的先决条件

Laravel 是一个 PHP 框架 广泛用于开发现代网络应用程序。

得益于其丰富的生态系统,它为开发以下项目提供了理想的环境 使用 PHP 进行网络搜刮 有组织、可维护的方式。首先,必须.....:

  • 🔥 掌握 PHP 和 Laravel 的基础知识。
  • 🔥 了解 HTML 和 CSS 以锁定元素。
  • 🔥 知道如何操作 Composer 安装软件包。

👉 必不可少的工具有

  • 下降 : la bibliothèque PHP de référence. Elle simplifie les requêtes et l’extraction de données.
  • 傀儡匠/无头铬 无头浏览器。对于使用大量 JavaScript 的页面来说是必不可少的。
  • Laravel HTTP 客户端 :允许您使用 Http::get() 来检索简单的内容。

使用 Laravel 创建第一个 scraper 的教程

按照本教程的步骤,用 Laravel 创建一个功能强大的 scraper。

⚠ 始终遵守网站的使用条款和条件,以及网站的使用条款和条件。 robots.txt 和当地法律。限制负载(速率限制),识别用户代理,不收集敏感数据。

步骤 1:安装和配置

创建一个新的 Laravel 项目,并添加 Goutte(Laravel 集成)。

# 1) 创建一个新的 Laravel 项目
compose create-project laravel/laravel scraper-demo
cd scraper-demo

# 2) 添加 Goutte(与 Laravel 集成)
composer require weidner/goutte

步骤 2:创建工艺订单

生成一条命令,其中包含您的刮擦逻辑:

php artisan make:command ScrapeData

文件在此处创建: app/Console/Commands/ScrapeData.php.

第 3 步:编写刮板代码

在生成的命令中,添加 :

  • ✅ 一个 HTTP 请求 来获取 HTML 内容。
  • ✅德斯 CSS 选择器 来定位数据。
  • ✅ 一个 来浏览项目并显示结果。

下面是一个例子 完整代码 pour scraper les titres d’articles d’un blog :

info("Scraping: {$url}");

        // 1) HTTP 请求检索 HTML
        $crawler = Goutte::request('GET', $url);

        // 2) 使用 CSS 选择器
        $nodes = $crawler->filter('h2 a');

        // 3) 循环元素并显示
        $nodes->each(function (Crawler $node, $i) {
            $title = $node->text();
            $link = $node->attr('href');
            $this->line(($i+1) ."." .$title ." - " .$link);
        });

        return self::SUCCESS;
    }
}

使用 Laravel 进行网络搜刮的最佳实践

制作 使用 Laravel 有效地进行网页刮擦时,需要注意以下几点提示:

1. Gestion des tâches et de la mise en file d’attente

抓取每个页面可能需要几秒钟。试想一下,如果你要抓取 1000 个页面,你的 Laravel 应用程序就会被阻塞很长一段时间,无法使用。解决方案:使用 工作Laravel 尾巴.

  • 一个 工作 c’est une tâche que vous voulez exécuter en arrière-plan.
  • A 机尾 (file d’attente), c’est l’endroit où on range ces jobs pour qu’ils soient exécutés petit à petit, sans bloquer le reste.

下面是一个例子 代码,将刮擦逻辑封装在一个 Job 中:

// app/Jobs/ScrapePageJob.php
<?php

namespace App\Jobs;

use Goutte\Client; // Ou Guzzle/Http, selon ta stack
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class ScrapePageJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected string $url;

    public function __construct(string $url)
    {
        $this->url = $url;
    }

    public function handle(): void
    {
        $client = new Client();

        $crawler = $client-&gt;request('GET', $this-&gt;url);

        // 简单示例:提取所有 <h1>
        $titles = $crawler-&gt;filter('h1')-&gt;each(function ($node) {
            return $node-&gt;text();
        });

        // 持久性/日志/事件...
        foreach ($titles as $title) {
            \Log::info("[Scraping] {$this-&gt;url} - H1: {$title}");
        }
    }
}

// app/Http/Controllers/ScraperController.php
onQueue('scraping'); // 如果需要专用队列
        }

        return response()->json(['status' => 'Scraping running in background 🚀']);
    }
}

👉 Comme vous avez vu, les jobs vont dans une queue (file d’attente). Laravel propose plusieurs systèmes pour gérer cette file. Les plus utilisées sont :

  • La file d’attente avec la base de données 工作以行的形式存储在 SQL 表中,然后由一个 worker.
  • La file d’attente avec Redis 任务以超高速队列的形式存放在内存中,是处理大量任务的理想选择。

2.使用 Laravel 任务调度程序实现自动化

Laravel 集成了 任务调度程序 (scheduler) qui permet d’自动清除.

所以你可以 planifier l’exécution d’une commande de scraping 定时,例如每小时一次。

👉 Voici comment l’exécuter dans app/Console/Kernel.php :

command('scraper:run')->hourly();

    // 有用的示例 :
    // $schedule->command('scraper:run')->everyFifteenMinutes();
    // $schedule->command('scraper:run')->dailyAt('02:30')->timezone('Indian/Antananarivo');
}

/**
 * 注册订单。
 */
protected function commands(): void
{
    $this->load(__DIR__ . '/Commands');
}


}

3.绕过防窃听保护

Beaucoup de sites mettent en place des protections contre les scrapers. Pour éviter d’être bloqué, il est mieux de :

  • ✅ Changer l’User-Agent 模拟真实的浏览器。
  • 管理最后期限 停顿sleep, throttle),以免目标服务器超载。
  • 使用代理 将请求分发到多个 IP 地址。

使用 Laravel 进行网络搜索的替代方法有哪些?

Même si Laravel est pratique pour intégrer le scraping dans une application PHP, il existe d’autres solutions souvent plus spécialisées.

Python 是使用最广泛的刮擦语言。它拥有 Scrapy 和 BeautifulSoup 等强大的库。

  • 无代码工具

De plus en plus d’outils permettent de faire du scraping 无编码 在哪里 avec l’aide de l’IA.我们引述 : 亮数据, Octoparse, Apify, ETC。

Bright Data 等解决方案使您无需编码即可快速收集数据。
像 Bright Data 这样的解决方案无需编码即可快速收集数据。Cristina for Alucare.fr

常见问题

如何使用 Laravel 搜索受登录保护的网站?

C’est l’un des défis les plus courants en web scraping. Pour y parvenir avec Laravel, il faut :

  1. 模拟连接 通过 POST 请求发送电子邮件地址和密码。
  2. 管理 cookie 或会话访问受保护的页面。

使用 Laravel 进行网页刮擦时,如何管理分页?

Pour gérer la navigation d’une page à l’autre avec Laravel, vous devez :

  1. 抓取第一页.
  2. Détecter le lien “page suivante” 的 CSS 选择器。
  3. 在每个链接上循环 jusqu’à la fin de la pagination.

如何导出刮擦数据(到 CSV、Excel 或 JSON)?

有了 Laravel,您就可以使用 .NET Framework 3.0:

  • fputcsv() 用于 CSV。
  • 书店 MaatwebsiteExcel 用于 Excel。
  • 本地函数 json_encode() 生成 JSON 文件。

如何处理刮擦过程中的错误和异常?

要使用 Laravel 管理失败的请求,你需要.NET Framework:

  1. 封装请求try/catch.
  2. Vérifier les codes d’état HTTP (404, 500, etc.). En cas d’erreur, les logger ou programmer un nouvel essai.

网络搜索是合法的还是非法的?

网络搜索的合法性 est un sujet complexe. Tout dépend du site ciblé et de l’usage des données.

📌了 法国的网络搜索 est souvent discuté dans le cadre du droit d’auteur et de la protection des bases de données.

💬 简而言之,"......"。 使用 Laravel 进行网页搜索 功能强大而灵活,但需要良好的实践才能保持其有效性和合法性。请在评论中告诉我们您的想法。

喜欢吗?分享它!

这些内容最初是 法语 (请参见下面的编辑器)。为了向尽可能多的国家提供帮助,我们使用 Deepl 和/或谷歌翻译 API 对该网站进行了多种语言的翻译和校对。我们每月的翻译费用高达数千欧元。如果它不是 100 % 完美,请给我们留言,以便我们进行修正。如果您对校对和提高翻译文章的质量感兴趣,请使用联系表格向我们发送电子邮件!
我们感谢您的反馈意见,以改进我们的内容。如果您想提出改进建议,请使用我们的联系表或在下面留言。 您的意见有助于我们提高网站质量 Alucare.fr


Alucare 是一家独立媒体。请将我们添加到您的谷歌新闻收藏夹,以支持我们:

在讨论区发表评论