【问题标题】:Emtpy return from link using goutte使用 goutte 从链接空返回
【发布时间】:2020-03-04 12:02:39
【问题描述】:

我正在运行PHP 7.3.5"fabpot/goutte": "^3.2"

我正在尝试从链接中抓取简介和日期,但是我没有得到任何回报。

在下面找到我的最小可行示例:

<?php
require_once 'vendor/autoload.php';

use Goutte\Client;

$client = new Client();

$url = 'body > div.container > div > div > ul.list-group.mb-5 > a';
$intr = 'body > div:nth-child(3) > div:nth-child(2) > div > table:nth-child(10) > tbody > tr > td > div > div:nth-child(1) > div > div > div > div > table > tbody > tr > th > table:nth-child(4) > tbody > tr > td';
$dat = 'body > div:nth-child(3) > div:nth-child(2) > div > table:nth-child(10) > tbody > tr > td > div > div:nth-child(1) > div > div > div > div > table > tbody > tr > th > table:nth-child(1) > tbody > tr > td:nth-child(1)';

//arrays
$introArr = array();
$urlArr = array();

$crawler = $client->request('GET', 'https://www.morningbrew.com/daily/2019/11/07');
$intro = $crawler->filter($intr)->each(function($node) {
    return $node;
});
$date = $crawler->filter($dat)->each(function($node) {
    return $node->html();
});
array_push( $introArr, $intro, $date);

我想回来:

任何建议我做错了什么?

感谢您的回复!

【问题讨论】:

    标签: php css-selectors goutte


    【解决方案1】:

    您提供给filter() 方法($intro$date)的选择器指向文档的 DOM 树中的任何内容。


    首先,对您提出的那些链式选择器稍微精确一点:

    $intr = 'body > div:nth-child(3) > ...';
    

    以防万一您不知道,不必从根节点(body 标记)开始查找元素。 例如,如果我想检索 .myDiv 元素,我可以执行以下操作:

    $crawler->filter('.myDiv');
    

    DOM 解析器也可以避免您遍历所有节点以查找特定或多个元素的痛苦,无论它们在树中的什么位置。


    为了更加简单,尽量减少对 HTML 标记的依赖来查找节点,并尽可能使用 CSS 类选择器。

    工作示例:

    $subCrawler = $client->request('GET', 'https://www.morningbrew.com/daily/2019/11/07');
    
    $date = $subCrawler->filter('.pcard')
                       ->filter('table:first-child')
                       ->filter('td:first-child')
                       ->text();
    
    $text = $subCrawler->filter('.pcard')
                       ->filter('table:nth-child(4)')
                       ->text();
    

    注意事项:

    • 由于我们只期望一个节点,因此无需使用 each() 迭代来检索节点的内容

    • filter() 调用在此处被链接以提高可读性,但这是一个偏好问题。将所有选择器合并为一个也是有效的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 2016-12-14
      • 1970-01-01
      相关资源
      最近更新 更多