Как собрать изображения с веб-сайта, включая ссылки в файлах CSS? - PullRequest
0 голосов
/ 03 марта 2012

В настоящее время я использую Simple HTML DOM, который отлично подходит для тегов:

    $html = file_get_html($url);
    $images = $html->find('img');
    $result = '';
    foreach ($images as $image):
        $result .= '<img src="'.$this->tasks->rel2abs($image->src, $url).'"><br>';
    endforeach;
    $html->clear(); 
    unset($html);
    echo $result;           

Но как мне также получить изображения из CSS-файлов, таких как background: или background-image:?

1 Ответ

2 голосов
/ 03 марта 2012

Я предполагаю, что вы используете PHP Simple HTML DOM Parser .Следующий код не протестирован, но он должен быть достаточно близок к тому, что вам нужно.

Во-первых, вам нужно получить все блоки CSS с помощью поиска, аналогичного приведенному выше.

$css_inline = $html->find("style");
$css_external = $html->find("link[rel='stylesheet']");

... затем вы можете искать во встроенных блоках url():

$css_images = array();

function extract_css_images ( $css )
{
    global $css_images;

    $matches = array();
    preg_match_all( "/url\((.*?)\)/", $css, $matches, PREG_SET_ORDER );

    foreach ( $matches as $match )
    {
        $css_images[] = trim( $match[1], "\"'" );
    }
}

foreach ($css_inline as $css)
{
    extract_css_images( $css->save() );
}

... затем извлечь внешние файлы CSS и повторить:

foreach ($css_external as $css_file)
{
    $file = $css_file->href;
    $css = file_get_contents($file);        
    extract_css_images( $css );
}

$css_images должен быть заполнен URL-адресами изображений.Хорошей идеей будет запустить array_unique для устранения дубликатов, и вам может понадобиться добавить информацию о пути, если они используют относительные пути.

Опять же, это не проверено по памяти, но оно должно приблизить вас.Это не найдет никаких изображений, которые вставляются с помощью Javascript.Это было бы гораздо сложнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...