regex — PHP Preg_match Изображение с URL

Я пытаюсь проанализировать веб-сайт и получить имя или URL-адрес изображения.

Пример URL:
http://www.theworkingmanstore.com/georgia-gr14-infants-romeo.aspx

Есть 6 или более изображений в одном <td> и я только хочу получить первый IMG SRC в этом <td>,

Я уверен, что это возможно сделать с Dom Parser, но у меня нет опыта работы с ним.

Любая помощь будет оценена.

Спасибо

$html = file_get_contents($url);
$reg = '/img src=["\']?([^"\' ]*)["\' ]/';
preg_match_all($reg, $html, $m);
$arr = array_map(function($v){
return trim(str_replace(array('img src=', 'http://www.theworkingmanstore.com'), '', $v), '"');}, $m[0]);
print_r($arr)

Выход:
Это вывод из регулярного выражения

массив
(
[0] => /images/logo2.png
[1] => /images/mod_head_category_lt.gif
[2] => '/Images/products/display/GR14_EXTRALARGE.jpg'
[3] => '/Images/products/thumb/GR14_EXTRALARGE.jpg'
[4] => '/Images/products/thumb/GR14_8_EXTRALARGE.jpg'
[5] => '/Images/products/thumb/GR14_5_EXTRALARGE.jpg'
[6] => '/Images/products/thumb/GR14_3_EXTRALARGE.jpg'
[7] => '/Images/products/thumb/GR14_42_EXTRALARGE.jpg'
[8] => '/Images/products/thumb/GR14_2_EXTRALARGE.jpg'
[9] => /images/freeshipping.jpg
[10] => /images/facebook_32.png
[11] => Изображения / twitter_32.png
[12] => Изображения / googleplus_32.png
[13] => Изображения / pinterest_32.png
[14] => /images/payments.gif
[15] => /images/brands/the-working-man.jpg
)

Попробовал предложение Dom Parser:

$html = file_get_contents($url) ;
$dom = new DOMDocument();
$dom->loadHtml($html);
$xpath = new DOMXPath($dom);
echo $xpath->evaluate(
'string(//td/a[@id = "Zoomer"]/descendant::img[1]/@src)'
);

Ошибка в качестве вывода:
Предупреждение: DOMDocument :: loadHTML () [domdocument.loadhtml]: недопустимая навигация по тегам в Entity

-1

Решение

В DOM все является узлом, img элементы и src атрибуты тоже. XPath позволяет извлекать списки узлов из DOM.

$dom = new DOMDocument();
$dom->loadHtml($html);
$xpath = new DOMXPath($dom);
foreach ($xpath->evaluate('//img/@src') as $src) {
echo $src->value, "\n";
}

Выход:

http://www.theworkingmanstore.com/images/products/display/GR14_EXTRALARGE.jpg
http://www.theworkingmanstore.com/images/products/detail/GR14_EXTRALARGE.jpg
/images/products/thumb/GR14_EXTRALARGE.jpg
/images/products/thumb/GR14_8_EXTRALARGE.jpg
/images/products/thumb/GR14_5_EXTRALARGE.jpg
/images/products/thumb/GR14_3_EXTRALARGE.jpg
/images/products/thumb/GR14_42_EXTRALARGE.jpg
/images/products/thumb/GR14_2_EXTRALARGE.jpg

XPath позволяет выйти из сложных условий. Следующие примеры выводят src атрибуты первого img внутри любого td,

$dom = new DOMDocument();
$dom->loadHtml($html);
$xpath = new DOMXPath($dom);

foreach ($xpath->evaluate('//td/descendant::img[1]/@src') as $src) {
echo $src->value, "\n";
}

Выход:

http://www.theworkingmanstore.com/images/products/display/GR14_EXTRALARGE.jpg

HTML-код в вопросе содержит только один tdи, что более важно, img находится внутри a элемент с id приписывать. Так что это должна быть единственная уникальная ценность. Это позволяет ему приводить список узлов непосредственно в XPath и возвращать его в виде строки.

$dom = new DOMDocument();
$dom->loadHtml($html);
$xpath = new DOMXPath($dom);
echo $xpath->evaluate(
'string(//td/a[@id = "Zoomer"]/descendant::img[1]/@src)'
);

Выход:

http://www.theworkingmanstore.com/images/products/display/GR14_EXTRALARGE.jpg
4

Другие решения

Вы можете попробовать использовать это регулярное выражение.

$html = 'Your HTML';
$reg = '/img src=["\']?([^"\' ]*)["\' ]/';
preg_match_all($reg, $html, $m);
$arr = array_map(function($v){
return trim(str_replace(array('img src=', 'http://www.theworkingmanstore.com'), '', $v), '"');
}, $m[0]);

print '<pre>';
print_r($arr);
print '</pre>';

Выход:

Array
(
[0] => /images/products/display/GR14_EXTRALARGE.jpg
[1] => /images/products/detail/GR14_EXTRALARGE.jpg
[2] => /images/products/thumb/GR14_EXTRALARGE.jpg
[3] => /images/products/thumb/GR14_8_EXTRALARGE.jpg
[4] => /images/products/thumb/GR14_5_EXTRALARGE.jpg
[5] => /images/products/thumb/GR14_3_EXTRALARGE.jpg
[6] => /images/products/thumb/GR14_42_EXTRALARGE.jpg
[7] => /images/products/thumb/GR14_2_EXTRALARGE.jpg
)
0

По вопросам рекламы [email protected]