@ikfah012
Не самый умный парень в этом чате

Как спарсить ссылку на изображение?

Добрый день!
Пытаюсь разобрать страницу через file_get_contents и не понимаю, как мне получить ссылку на изображение.
Вот пример кода, который я пытаюсь парсить:
<p class="attr">
<em class="l-attr">Производитель: </em>
<em class="r-attr">
<a href="/brands/brandname/">Brand</a>
</em>
<em class="lnr"></em></p>

<div id="msgood-gallery" class="msgood-gallery mightyslider_modern_skin horizontal isTouch mightySlider">
  <a class="mSButtons mSPrev disabled"></a>
  <a class="mSButtons mSNext"></a>
  <div class="msgood-frame mSFrame mSTouchDraggable" style="overflow: hidden;">
    <div class="msgood-slideelement mSSlideElement" itemscope="" itemtype="http://schema.org/ImageObject" style="width: 3000px; transform: translateZ(0px);" data-img-cnt="6" data-pswp-uid="1">
      <a itemprop="contentUrl" href="/assets/images/catalog/image_1400/lit-lv-2702.jpg?dt=2020112208" data-size="1400x1400" data-med="/assets/images/catalog/image_900/lit-lv-2702.jpg?dt=2020112208" data-med-size="900x900" class="msgood-gallery-img mSSlide active" target="_blank" onclick="return false;" msslideloaded="1">
        <img src="/assets/images/catalog/image_500/lit-lv-2702.jpg?dt=2020112208" data-original="/assets/images/catalog/image_500/lit-lv-2702.jpg?dt=2020112208" alt="Фото 1" style="">
        <figure itemprop="name">Фото 1</figure>
      </a>

      <a itemprop="contentUrl" href="/assets/images/catalog/image_1400/lit-lv-2702_b01.jpg?dt=2020112208" data-size="1400x1400" data-med="/assets/images/catalog/image_900/lit-lv-2702_b01.jpg?dt=2020112208" data-med-size="900x900" class="msgood-gallery-img mSSlide" target="_blank" onclick="return false;">
        <img src="/assets/images/catalog/image_500/lit-lv-2702_b01.jpg?dt=2020112208" data-original="/assets/images/catalog/image_500/lit-lv-2702_b01.jpg?dt=2020112208" alt="Фото 2" style="">
        <figure itemprop="name"Фото 2</figure>
      </a>

      <a itemprop="contentUrl" href="/assets/images/catalog/image_1400/lit-lv-2702_b02.jpg?dt=2020112208" data-size="1400x1400" data-med="/assets/images/catalog/image_900/lit-lv-2702_b02.jpg?dt=2020112208" data-med-size="900x900" class="msgood-gallery-img mSSlide" target="_blank" onclick="return false;">
        <img src="/assets/images/catalog/image_500/lit-lv-2702_b02.jpg?dt=2020112208" data-original="/assets/images/catalog/image_500/lit-lv-2702_b02.jpg?dt=2020112208" alt="Фото 3" style="">
        <figure itemprop="name">Фото 3</figure>
      </a>
    </div>
    </div></div>


А вот как я получаю данные по производителю:
$brand = strip_tags(trim(Parse($string, '<p class="attr"><em class="l-attr">Производитель: </em><em class="r-attr">', '</a></em><em class="lnr"></em></p>')));
  $brand = mysqli_real_escape_string($link, $brand);
  $brand = preg_replace('/Производитель: /', '', $brand);

Вопрос в том, как мне получить ссылки на изображения?
Атрибут data-img-cnt у каждой страницы может иметь разное значение, равное количеству изображений.
  • Вопрос задан
  • 235 просмотров
Решения вопроса 2
@DanKud
Не знаю, что у вас за функция Parse(), но парсите регулярками. Картинки можно спарсить так:

preg_match_all('#<img\s*src="(.+?)"\s*data-original#', $str, $m);
$imageLinks = $m[1];
print_r($imageLinks);

Если парсить приходится много, то можно подключить сторонние библиотеки для удобного парсинга.
Например DomCrawler
Ответ написан
artzolin
@artzolin
php, WordPress разработка сайтов artzolin.ru
Посоветую подключить какую-то библиотеку для парсинга по селекторам и жизнь станет проще. Вот пример, как достать нужные вам значения используя Simple HTML DOM Parser

if ( file_exists( $file_path ) ) {	
	$html = file_get_html($file_path);

	// получаем r-attr
	$r_attr_text = $html->find( '.r-attr a', 0 )->plaintext;
	$r_attr_link = $html->find( '.r-attr a', 0 )->href;

	// получаем ссылки на изображения
	$images = $html->find( '#msgood-gallery img' );
	foreach ( $images as $key => $image ) {
		$link = $image->src;
	}

	$html->clear();
	unset($html);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы