DomCrawler filterXpath не всегда дает полный URL - PullRequest
1 голос
/ 16 октября 2019

Для моего проекта я использую domcrawler для анализа страниц и извлечения изображений.

Код:

$goutteClient = new Client();
$guzzleClient = new GuzzleClient(array(
    'timeout' => 15,
));

$goutteClient->setClient($guzzleClient);

try {
    $crawler = $goutteClient->request('GET', $url);
    $crawlerError = false;
} catch (RequestException $e) {
    $crawlerError = true;
}

if ($crawlerError == false) {

    //find open graph image
    try {
        $file = $crawler->filterXPath("//meta[@property='og:image']")->attr('content');
    } catch (\InvalidArgumentException $e) {
        $file = null;
    }

    //if that fails, find the biggest image in the DOM      
    if (!$file) {
        $images = $crawler
        ->filterXpath('//img')
        ->extract(array('src'));    

        $files = [];
        foreach ($images as $image) {

            $attributes = getimagesize($image);
            //stopping here since this is where i'm getting my error

Соответствующая часть находится внизу. Это будет работать некоторое время. Однако иногда я получаю сообщение об ошибке. Например, если $url было https://www.google.com, то выскочила бы следующая ошибка:

ErrorException (E_WARNING) getimagesize (/images/branding/googlelogo/1x/googlelogo_white_background_color_272x92dp.png): не удалось открыть поток: нет такого файла или каталога

Если I dd($image); в этой ситуации, $image равно "/images/branding/googlelogo/1x/googlelogo_white_background_color_272x92dp.png".

Тем не менее, если я пытаюсь использовать веб-сайт, который не выдает ошибку, например https://www.harvard.edu, dd($image); возвращает "https://www.harvard.edu/sites/default/files/feature_item_media/Kremer900x600.jpg"

Другими словами, яне получить полный URL. Как я могу исправить это?

1 Ответ

0 голосов
/ 16 октября 2019

Предварительно связать относительные ссылки со схемой и хостом. Вы можете использовать parse_url на $url, чтобы извлечь схему и хост, и можете использовать ту же функцию на $image, чтобы определить, установлена ​​ли схема / хост.

...