Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Emtpy使用痛风从链路返回_Php_Css Selectors_Goutte - Fatal编程技术网

Php Emtpy使用痛风从链路返回

Php Emtpy使用痛风从链路返回,php,css-selectors,goutte,Php,Css Selectors,Goutte,我正在运行PHP7.3.5和“fabbot/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 >

我正在运行
PHP7.3.5
“fabbot/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);

您提供给
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()
    调用链接在这里以提高可读性,但这是一个偏好问题。将所有选择器连接为一个选择器也是有效的