Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 18.01.2017
Сообщений: 207

Нужен скрипт для считывания атрибута src изображений из html кода и замены каждого из них

20.02.2023, 02:06. Показов 2652. Ответов 73
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть переменная $html, в которой произвольный html код. нужно найти в нём все теги img, и собрать их атрибуты src в массив $arrSrc. Дальше массив перебирается, и для каждого тега img генерируется новый атрибут src.
PHP
1
2
3
4
5
foreach ($arrSrc as $k => $src)
{
    $src_new = make_new_src($src);
    // дальше  заменить в $html атрибут данного тега на $src_new
}
вопрос как вставлять новые атрибуты обратно в код $html? замена подстроки не подходит, потому что в коде может быть текст аналогичный старому src, но не в атрибуте src тега img. А заменять надо только в атрибутах src. и у двух изображений в исходном коде может быть одинаковый src, а новые src сгенерируются разные.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.02.2023, 02:06
Ответы с готовыми решениями:

Для считывания html кода сайта
Всем доброго времени суток. У меня такой вопрос возможно ли считать html код сайта? Если да то как. Например есть такой код сайта ...

Нужен скрипт исполнения html кода
В названии описал не совсем точно, но вот основная мысль! (излагаю в виде скриншота) (Для ввода текста использую <textarea>, но...

Нужен скрипт для сжатия изображений
на странице есть дивы, в которых изображения прописаны через img, но размеры этих изображений достаточно большие, поэтому при запуске сайта...

73
132 / 76 / 16
Регистрация: 08.07.2022
Сообщений: 309
20.02.2023, 04:55
https://github.com/Imangazaliev/DiDOM

Самый лучший из всех, для разных подобных задач как парсинг, или работа с DOM

Поддерживает подобные запросы как

PHP
1
$value = $document->find('.subcategory-resident-list .resident-item .thumb [target="_blank"]::attr(href)');
И многое другое. Аля тот же jquery. Из плюсов, не жрёт как бешенный оперативную память,и очень быстро работает

Добавлено через 2 минуты
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// все ссылки
$document->find('a');
 
// любой элемент с id = "foo" и классом "bar"
$document->find('#foo.bar');
 
// любой элемент, у которого есть атрибут "name"
$document->find('[name]');
 
// эквивалентно
$document->find('*[name]');
 
// поле ввода с именем "foo"
$document->find('input[name=foo]');
$document->find('input[name=\'foo\']');
$document->find('input[name="foo"]');
 
// поле ввода с именем "foo" и значением "bar"
$document->find('input[name="foo"][value="bar"]');
 
// поле ввода, название которого НЕ равно "foo"
$document->find('input[name!="foo"]');
 
// любой элемент, у которого есть атрибут,
// начинающийся с "data-" и равный "foo"
$document->find('*[^data-=foo]');
 
// все ссылки, у которых адрес начинается с https
$document->find('a[href^=https]');
 
// все изображения с расширением png
$document->find('img[src$=png]');
 
// все ссылки, содержащие в своем адресе строку "example.com"
$document->find('a[href*=example.com]');
 
// все ссылки, содержащие в атрибуте data-foo значение bar отделенное пробелом
$document->find('a[data-foo~=bar]');
 
// текст всех ссылок с классом "foo" (массив строк)
$document->find('a.foo::text');
 
// эквивалентно
$document->find('a.foo::text()');
 
// адрес и текст подсказки всех полей с классом "bar"
$document->find('a.bar::attr(href|title)');
 
// все ссылки, которые являются прямыми потомками текущего элемента
$element->find('> a');



Работа с атрибутами элемента
https://github.com/Imangazalie... 1%82%D0%B0

Кстати, вот пример

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
require "vendor/autoload.php";
 
use DiDom\Document;
 
$document = new Document();
$document->loadHtmlFile('https://yandex.ru/images/');   
 
// $document->find('img::attr(src)')
 
foreach($document->find('img') as $item_img) {
    $srcImg = $item_img->attr('src'); // Тут старое ИЗО
    echo $srcImg, '<br>';
 
    // Ставим новое
    $item_img->attr('src', 'https://avatars.mds.yandex.net/i?id=2143351cbcff6e72f8bbbc5512597532_l-5484702-images-thumbs&n=27&h=384&w=480');
    
}
 
// Сохраняем результат в файл
file_put_contents('new.html', $document->html() );
0
Заблокирован
20.02.2023, 09:15
Цитата Сообщение от xkkx Посмотреть сообщение
Аля тот же jquery. Из плюсов, не жрёт как бешенный оперативную память,и очень быстро работает

Я бы добавил. Работает на основе JS

Добавлено через 52 минуты
4234, если надо именно на php - тогда можно так попробовать:

PHP
1
2
3
4
5
6
7
8
$get = file_get_contents('https://www.cyberforum.ru/holywars/thread3078329.html');
 
preg_match_all( '#src="(.+?)"#is', $get, $reg );
 
foreach ( $reg[1] as $value )
{
   echo  $value.'<br>';
}
Добавлено через 1 час 40 минут
Внутри цикла делать замену.
Цитата Сообщение от 4234 Посмотреть сообщение
замена подстроки не подходи
Подходит)
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
$get = file_get_contents('https://www.cyberforum.ru/holywars/thread3078329.html');
 
preg_match_all( '#src="(.+?)"#is', $get, $reg );
 
$new_value='src="https://www.cyberforum.ru/customavatars/avatar2132501_4.gif"';
foreach ( $reg[1] as $value )
{
   echo  $value.'<br>';
   $scr='src="'.$value.'"';
    if(stristr($get,$scr))
        $get = str_replace($scr,$new_value,$get);
}
echo $get;
0
132 / 76 / 16
Регистрация: 08.07.2022
Сообщений: 309
20.02.2023, 14:08
Цитата Сообщение от POSE Посмотреть сообщение
Я бы добавил. Работает на основе JS
За то работает быстро, и чётко. Без регулярной магии(Точнее она там есть, но нормальная). При помощи только PHP

Цитата Сообщение от POSE Посмотреть сообщение
если надо именно на php
Где ты вообще увидел что на основе JS ?))) Я говорил что синтаксис аля jquery А ты уже начал извращаться с регуляркой)
0
Заблокирован
20.02.2023, 14:08
Цитата Сообщение от xkkx Посмотреть сообщение
Где ты вообще увидел что на основе JS ?
А я даже не смотрел. Думал, что опять своё рекламируешь
0
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469
20.02.2023, 15:26
xkkx
attr
что делает attr?
пошел гуглить но нашел
EvStat::attr — Возвращает значения, недавно обнаруженные Ev
Ничего не понял =(
0
132 / 76 / 16
Регистрация: 08.07.2022
Сообщений: 309
20.02.2023, 15:37
Цитата Сообщение от G_manX Посмотреть сообщение
что делает attr?
Получает, или устанавливает атрибуты

https://developer.mozilla.org/... Attributes


В Ванильном JS есть такие функции
https://developer.mozilla.org/... tAttribute
https://developer.mozilla.org/... tAttribute
0
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469
20.02.2023, 16:28
xkkx
почему в офф. доке ничего не сказано про attr?
я нашел там только про EvStat::attr, который работает с массивами =(
0
Заблокирован
20.02.2023, 17:17
Цитата Сообщение от G_manX Посмотреть сообщение
xkkx
почему в офф. доке ничего не сказано про attr?
Да плюнь ты на его пример. Я тебе выложил рабочий вариант в несколько строк кода. Без понтов и подключаемых библиотек
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
20.02.2023, 17:20
Цитата Сообщение от G_manX Посмотреть сообщение
что делает attr?
Он же дал ссылку, сама функция тут
0
132 / 76 / 16
Регистрация: 08.07.2022
Сообщений: 309
20.02.2023, 17:37
Цитата Сообщение от POSE Посмотреть сообщение
Да плюнь ты на его пример.
Это очень популярная библиотека. Можно тонны инфы найти в первых запросах гугла. Даже видяшки есть

https://doc.hotexamples.com/ru/class/didom/Element
https://rigin.net/raznoe/php/d... -html.html
https://code.tutsplus.com/ru/t... -cms-31242


https://www.youtube.com/watch?v=qVFpK_gV1Ns
https://www.youtube.com/watch?v=YjBGOIe7ny4



Добавлено через 1 минуту
Цитата Сообщение от POSE Посмотреть сообщение
выложил рабочий вариант
Ветер подует, и сдует твой пример рабочий)

Добавлено через 4 минуты
Цитата Сообщение от POSE Посмотреть сообщение
preg_match_all( '#src="(.+?)"#is', $get, $reg );
Надо брать и заменять только те, которые начинаются <img
0
Заблокирован
20.02.2023, 18:03
Цитата Сообщение от xkkx Посмотреть сообщение
Надо брать и заменять только те, которые начинаются <img
Действительно. Забыл про подключаемые js файлы. Ну, при желании можно доработать. Лень. Пусть твой пользует.
0
132 / 76 / 16
Регистрация: 08.07.2022
Сообщений: 309
20.02.2023, 18:11
Цитата Сообщение от POSE Посмотреть сообщение
Пусть твой пользует.
Я на нём реализовал очень сложный парсер, который ползает по разным площадкам(Любым, даже неизвестным) и вылавливает хорошие ценники на товары. Работает 24 на 7 без перезагрузок. Шастает по всем страницам, и анализирует много чего полезного.
0
Заблокирован
20.02.2023, 18:14
Цитата Сообщение от xkkx Посмотреть сообщение
Шастает по всем страницам, и анализирует много чего полезного.
На мои сайты твой скрипт не зайдет. Я сам это не могу сделать
0
132 / 76 / 16
Регистрация: 08.07.2022
Сообщений: 309
20.02.2023, 18:16
Цитата Сообщение от POSE Посмотреть сообщение
На мои сайты твой скрипт не зайдет. Я сам это не могу сделать
А что сложно? Ставим user agent, имитируем все настройки реального пользователя. И готово.

Если конечно твой сайт не разворачивает самого себя из JS

Добавлено через 29 секунд
Цитата Сообщение от xkkx Посмотреть сообщение
Если конечно твой сайт не разворачивает самого себя из JS
Очень противные сайты, которые строят весь DOM из JS Json
0
Заблокирован
20.02.2023, 18:24
Цитата Сообщение от xkkx Посмотреть сообщение
Ставим user agent
Не смеши. Это для защита для детей

Добавлено через 48 секунд
Цитата Сообщение от xkkx Посмотреть сообщение
Очень противные сайты, которые строят весь DOM из JS Json
Нет. Я этим не занимаюсь.
0
132 / 76 / 16
Регистрация: 08.07.2022
Сообщений: 309
20.02.2023, 18:34
Цитата Сообщение от POSE Посмотреть сообщение
Не смеши. Это для защита для детей
Ты не очень многое можешь придумать в виде защиты (Защита это миф) Можно на любой сайт зайти через Скрипты.

Достаточно открыть F12 перезагрузить страницу. И нужный URL скопировать в любой скрипт, фетч, curl и так далее.

Например вот
curl "https://www.cyberforum.ru/php-beginners/thread3081276-page2.html" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8" -H "Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3" -H "Accept-Encoding: gzip, deflate, br" -H "Referer: https://www.cyberforum.ru/php-beginners/" -H "Connection: keep-alive" -H "Cookie: cfdup_timestamp=1726346221; __ddg1_=gXhPgPaLd3OXlALsflrs; __ddgid_=lco12O81l8fs9LqX; __ddg2_=Lxld3hfcbdq4lehq; cflastvisit=1650792784; cflastactivity=0; cfuserid=2008277; cfpassword=0lx24157244f4la846dd13d457x12 33a; cfsessionhash=224e5q36c4lf362xc2k35c12f3 f2l2x2; cfdup_timestamp=1676905650; __ddgmark_=LxLfvgLxdLzsLlZ3; vbseo_loggedin=yes" -H "Upgrade-Insecure-Requests: 1" -H "Sec-Fetch-Dest: document" -H "Sec-Fetch-Mode: navigate" -H "Sec-Fetch-Site: same-origin" -H "Pragma: no-cache" -H "Cache-Control: no-cache"


Я гуглю curl cmd shell to PHP

И получаю
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
$ch = curl_init();
 
curl_setopt($ch, CURLOPT_URL, 'https://www.cyberforum.ru/php-beginners/thread3081276-page2.html');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
 
 
$headers = array();
$headers[] = 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0';
$headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8';
$headers[] = 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3';
$headers[] = 'Accept-Encoding: gzip, deflate, br';
$headers[] = 'Referer: https://www.cyberforum.ru/php-beginners/';
$headers[] = 'Connection: keep-alive';
$headers[] = 'Cookie: cfdup_timestamp=1726346221; __ddg1_=gXhPgPaLd3OXlALsflrs; __ddgid_=lco12O81l8fs9LqX; __ddg2_=Lxld3hfcbdq4lehq; cflastvisit=1650792784; cflastactivity=0; cfuserid=2008277; cfpassword=0lx24157244f4la846dd13d457x1233a; cfsessionhash=224e5q36c4lf362xc2k35c12f3f2l2x2; cfdup_timestamp=1676905650; __ddgmark_=LxLfvgLxdLzsLlZ3; vbseo_loggedin=yes';
$headers[] = 'Upgrade-Insecure-Requests: 1';
$headers[] = 'Sec-Fetch-Dest: document';
$headers[] = 'Sec-Fetch-Mode: navigate';
$headers[] = 'Sec-Fetch-Site: same-origin';
$headers[] = 'Pragma: no-cache';
$headers[] = 'Cache-Control: no-cache';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
 
$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);
Я конечно Америку сейчас отрыл(тебе), рассказав что все страницы браузера работают ровно так же как через обычный скрипт)
0
Заблокирован
20.02.2023, 18:42
xkkx, ты меня не слушаешь. Ко мне на сайт ты удаленно не зайдешь. Только по адресу через браузер. Курл тебе не поможет
0
132 / 76 / 16
Регистрация: 08.07.2022
Сообщений: 309
20.02.2023, 19:40
Цитата Сообщение от POSE Посмотреть сообщение
ты меня не слушаешь. Ко мне на сайт ты удаленно не зайдешь. Только по адресу через браузер. Курл тебе не поможет
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function GetURLBody($url, $USERAGENT){
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_USERAGENT, $USERAGENT);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_VERBOSE, true);
    
    $cookies = tempnam ("/tmp", "CURLCOOKIE");
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookies);
    curl_setopt($curl, CURLOPT_COOKIEFILE, $cookies);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
    curl_setopt($curl, CURLOPT_COOKIESESSION, true ); // session true
    curl_exec($curl); // load session 
 
    $result = curl_exec($curl); // get body
    if (curl_errno($curl)) {
        echo 'Error:' . curl_error($curl);
    }
    curl_close($curl);
      
   return $result;
}
Твой сайт работает на сессии

Добавлено через 27 секунд
Вот так с вероятностью 100% получим ответ html

PHP
1
var_dump(GetURLBody('https://', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/110.0'));
Добавлено через 3 минуты
Это тестовый пример, так как твой сайт чего то не работает. Я только что пришёл, проверить не могу

Добавлено через 2 минуты
Но по сути флаг CURLOPT_COOKIESESSION запустит сессию, и твоей страницы ничего не останется, как отдать весь контент
0
Заблокирован
20.02.2023, 19:41
xkkx, в Краснодаре живешь? Твой айпи - 85.174.202.157 ? Айпи в бане
Если есть на свете рай – это Краснодарский край
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.02.2023, 19:41
Помогаю со студенческими работами здесь

Скрипт замены изображений
Вообщем написал скрипт своими силами Меняет картинки скрывая/показывая блоки с изображениями, но слишком громоздка может кто подскажет...

Не работает скрипт замены изображений
Уже всю голову сломал почему он не работает. help (function($) { $(document).ready(function() { $('#preview img').on('click',...

Получение значений href, src и alt из фрагмента HTML-кода
Доброго времени суток. к примеру есть такой код $q = '&lt;a href=&quot;http://www.site.ru/&quot;&gt;&lt;img...

Скрипт для обновления HTML кода
На внутреннем сервере есть папка с файлам для html страниц (index.html + ещё несколько страничек, папка img, папка css, папка files). Хочу...

Скрипт для добавления кода на 1000 html страниц
Добрый вечер. Видимо конец дня и не могу сообразить.Есть задание, надо на 1000 html страниц с одинаковой структурой добавить код в одно и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru