Добрый день. Проблема конкретно с этим сайтом и не могу понять почему, а так код рабочий. Использую - simple_html_dom
Ошибка - http://prntscr.com/gmib3k А должно работать так (пример этого кода работы с другим сайтом) - http://prntscr.com/gmignt
include "simple_html_dom.php";
ini_set('allow_url_fopen','1');
// Получаем ссылки на товары из категории
$html_category = file_get_html('https://skymec.ru/everyone/accessories/aksessuari-dlja-spark/');
$links = array();
foreach($html_category->find('.item a.image') as $a) {
$links[] = $a->href;
}
echo "<pre>";
print_r($links);
echo "</pre>";
echo "Товаров - ".count($links);
echo "<br/>";
echo "Кодировка - ".mb_detect_encoding($articles);
$i = 0;
$tovar_number = count($links) - 1;
while ($i <= $tovar_number) {
$html_product = file_get_html($links[$i++]);
$links_product = array();
foreach($html_product->find('html') as $a_product) {
$links_product['_NAME_'] = $html_product->find('h1',0)->plaintext;
$links_product['_META_TITLE_'] = $links_product['_NAME_'];
$links_product['_MODEL_'] = $links_product['_NAME_'];
$links_product['_META_KEYWORDS_'] = $html_product->find("meta[name=keywords]",0) ->getAttribute('content');
$articles[] = $links_product;
}
}
echo "<pre>";
print_r($articles);
echo "</pre>";
Проблема в том, что вы отключили показ предупреждений пхп и видите только фатальные ошибки.
И вот, что вы теряете:
Warning: file_get_contents(https://skymec.ru/index.php?route=product/product&path=20_68_131&product_id=1465):
failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
Вторая ваша ошибка, вы смотрите страницу, а не ее исходный код. Браузер маскирует косячные &
в ссыслке и показывает их как &
, и вам кажется что ссылка нормальная. В действительности же вот они какие:
[0] => https://skymec.ru/index.php?route=product/product&path=20_68_131&product_id=1465
[1] => https://skymec.ru/index.php?route=product/product&path=20_68_131&product_id=1466
[2] => https://skymec.ru/index.php?route=product/product&path=20_68_131&product_id=1467
[3] => https://skymec.ru/index.php?route=product/product&path=20_68_131&product_id=1468
[4] => https://skymec.ru/everyone/spark-dji/aksessuari-dlja-spark-1/kabel-dji-goggles-micro-usb-otg-cable--part6-/
[5] => https://skymec.ru/index.php?route=product/product&path=20_68_131&product_id=1499
[6] => https://skymec.ru/everyone/mavic/aksessuari-dlja-mavic-1/goggles-mavic-sling-bag/
[7] => https://skymec.ru/everyone/mavic/aksessuari-dlja-mavic-1/apark_mavic_part14_shoulder_bag/
Поэтому чтобы нормально открыть ссылку необходимо провести соответствующее преобразование:
$html_product = file_get_html( htmlspecialchars_decode($links[$i++]) );
Правда при включенных нотисах и варнингах у вас сразу же посыпятся уведомления вида:
Notice: Trying to get property of non-object in /home/teran/public_html/index.php on line 26
Т.к. на полученной странице отсутствует искомый тэг h1
.
зы: у вас там в тексте какой то непонятный цикл foreach($html_product->find('html') as $a_product) {
, который избыточен и лишен смысла.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть строка с картинкой в виде бинарных данных взятых из базы
Есть код вывода статей на статической странице с постраничной навигацией:
Есть строка вида: [text='15';] Нужно с помощью регулярного выражения и php вытащить число 15
ЗдравствуйтеМне нужно сгруппировать значения массива в зависимости от приоритета