Соскоб в сети с Xpath, захват IMG - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь вычеркнуть немного img со страницы. Но не мог схватить их. Мой путь верен (я думаю), но Xpath возвращает 0. Есть идеи, что не так с моим путем?

function pageContent($url)
{

    $html = cache()->rememberForever($url, function () use ($url) {
        return file_get_contents($url);
    });

    $parser = new \DOMDocument();
    $parser->loadHTML($html);
    return $parser;

}

$url = 'https://sumai.tokyu-land.co.jp/osaka';

@$parser = pageContent($url);

$resimler = [];
$rota = new \DOMXPath($parser);
$images = $rota->query("//section//div[@class='p-articlelist-content-left']//div[@class='p-articlelist-content-img']//img");


foreach ($images as $image) {
    $resimler[] = $image->getAttribute("src");
}

var_dump($resimler);

1 Ответ

0 голосов
/ 05 ноября 2018

Вы искали div[@class='p-articlelist-content-img'] вместо ul.

Кроме того, вы не должны скрывать сообщения об ошибках с оператором @, вместо этого используйте функцию libxml_use_internal_errors() , как и было задумано.

Наконец, поиск // в XPath стоит дорого, поэтому по возможности избегайте его, и вы можете получить значение атрибута непосредственно из запроса (хотя я не знаю, является ли это более эффективным.)

function pageContent(String $url) : \DOMDocument
{
    $html = cache()->rememberForever($url, function () use ($url) {
        return file_get_contents($url);
    });
    $parser = new \DOMDocument();
    libxml_use_internal_errors(true);
    $parser->loadHTML($html);
    libxml_use_internal_errors(false);
    return $parser;
}

$url    = "https://sumai.tokyu-land.co.jp/osaka";
$parser = pageContent($url);
$rota   = new \DOMXPath($parser);
$images = $rota->query("//ul[@class='p-articlelist-content-img']/li/img/@src");

foreach ($images as $image) {
    $resimler[] = $image->nodeValue;
}

var_dump($resimler);
...