You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Goutte与Laravel的动态网页抓取:无需指定HTML标签的实现方法

无需指定精确HTML标签批量抓取网页数据的方法(Goutte + Laravel)

完全脱离HTML标签抓取数据是不可能的——网页内容本身就是通过标签组织的,但可以通过更通用的方式减少对具体标签/类名的依赖,以下是几种实用方案:

  • 提取页面全部文本内容
    直接抓取页面主体的所有文本,适合只需要纯文本内容的场景,不用关心具体标签结构:

    $crawler = $client->request('GET', 'https://www.cnnchile.com/opinion/');
    // 去除多余空格和换行,整理成连贯文本
    $allText = trim(preg_replace('/\s+/', ' ', $crawler->filter('body')->text()));
    
  • 基于语义化标签批量提取
    利用HTML的语义化标签(如h1-h6、article、p)来定位内容,这类标签的通用性远高于自定义类名:

    $crawler = $client->request('GET', 'https://www.cnnchile.com/opinion/');
    // 提取所有标题类内容(h2标签)
    $titles = $crawler->filter('h2')->each(function ($node) {
        return trim($node->text());
    });
    // 提取所有段落内容
    $paragraphs = $crawler->filter('p')->each(function ($node) {
        return trim($node->text());
    });
    
  • 解析页面内嵌的结构化数据
    很多网站会通过JSON-LD格式内嵌结构化数据,直接解析这类数据比抓HTML标签更稳定,无需依赖页面布局:

    $crawler = $client->request('GET', 'https://www.cnnchile.com/opinion/');
    // 定位JSON-LD脚本标签
    $jsonLdContent = $crawler->filter('script[type="application/ld+json"]')->first()->text();
    // 解析为关联数组
    $structuredData = json_decode($jsonLdContent, true);
    // 按需提取结构化数据,比如文章列表
    $articles = $structuredData['itemListElement'] ?? [];
    
  • 基于上层容器批量提取区块内容
    不用精确到子标签,先抓取内容的上层容器,再提取容器内的所有文本,避免因嵌套标签变动导致抓取失败:

    $crawler = $client->request('GET', 'https://www.cnnchile.com/opinion/');
    // 抓取所有内容区块容器
    $contentBlocks = $crawler->filter('.inner-item')->each(function ($node) {
        // 整合区块内所有文本为单一字符串
        return trim(preg_replace('/\s+/', ' ', $node->text()));
    });
    

这些方案可以在减少标签依赖的同时,保证抓取的灵活性和稳定性,具体选择哪种取决于你需要的内容类型和目标网站的结构特征。

内容的提问来源于stack exchange,提问作者Jis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:24:32