Подскажите как спарсить картинки с относительным адресом?

12
G5
На сайте с 07.03.2008
Offline
122
741

Здравствуйте,

подскажите пожалуйста по следующей проблеме. Делаю парсер таблицы. не знаю как лучше, но решил реализовать через simple_html_dom parser.

Сделал такой код.

Код:

<?
include 'simple_html_dom.php';
$html = file_get_html('https://test.ru');
foreach($html->find('a') as $main){
$main->outertext = '';
}
$news = $html->find('div.stage-results-in');
$news2 = $html->find('div.stage-results-after');

?>
<table><tr><td> <? echo $news['0'];?></td><td><? echo $news2['0'];?></td></tr></table>
<?
$html->clear();
unset($html);
?>

В результате картинки не отображаются, так как на исходной странице прописан не абсолютный адрес, а относительный. Как сделать так, чтобы картинки в спарсенном куске кода отображались? Я так понял, родной CSS сайта сохранить нельзя, придется свой дописывать?

Васо Вчеразаши
На сайте с 20.05.2018
Offline
65
#1

Еще плохо щарю в пхп, но может так:

$news2 = preg_replace('/img src="/s', 'img src="https://test.ru/', $news2);

Ну а вообще по хтмл коду с картинками нужно смотреть...

S
На сайте с 30.09.2016
Offline
469
#2

Васо Вчеразаши, не надо применять preg_replace() в тех случаях, когда достаточно str_replace().

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
G5
На сайте с 07.03.2008
Offline
122
#3
Васо Вчеразаши:
Еще плохо щарю в пхп, но может так:
$news2 = preg_replace('/img src="/s', 'img src="https://test.ru/', $news2);

Ну а вообще по хтмл коду с картинками нужно смотреть...

спасибо большое!

---------- Добавлено 30.12.2019 в 15:42 ----------

Sitealert:
Васо Вчеразаши, не надо применять preg_replace() в тех случаях, когда достаточно str_replace().

А как его правильно применять?

$news2 = str_replace('/img src="/s', 'img src="https://test.ru/', $news2);

у меня почему-то не работает.

S
На сайте с 30.09.2016
Offline
469
#4
grach5:
почему-то не работает.

Наверное, потому что адреса не начинаются с буквы s. Лишняя она там. Да и перед img слэш лишний.

G5
На сайте с 07.03.2008
Offline
122
#5
Sitealert:
Наверное, потому что адреса не начинаются с буквы s. Лишняя она там. Да и перед img слэш лишний.

не могу понять.

код

$news2 = str_replace('img src="/', 'img src="https://test.ru/', $news2);

не меняет адреса. картинки не выводит.

Samail
На сайте с 10.05.2007
Offline
369
#6
grach5:
не меняет адреса. картинки не выводит.

html код картинки поглядеть нужно, может там между img и src= ещё что-то есть, или пробел не один, или кавычки одинарные, или буквы заглавные, или ещё что-то.

Васо Вчеразаши
На сайте с 20.05.2018
Offline
65
#7
grach5:
не могу понять.
код
$news2 = str_replace('img src="/', 'img src="https://test.ru/', $news2);

не меняет адреса. картинки не выводит.

Уберите слеш в шаблоне поиска

$news2 = str_replace('img src="', 'img src="https://test.ru/', $news2);

В моем варианте слеши по краям служили экранами.

S
На сайте с 30.09.2016
Offline
469
#8
Васо Вчеразаши:
Уберите слеш в шаблоне поиска.

Скорее всего, так и есть, но тогда в каких-то случаях в результате полезут адреса типа https://test.ru//adres и https://test.ru/https://test.ru/adres. То есть в общем случае нужна более сложная регулярка. Мы же не знаем, что конкретно ТС парсит.

---------- Добавлено 31.12.2019 в 10:24 ----------

Васо Вчеразаши:
экранами.
Ограничителями. Экраны – это другое.
G5
На сайте с 07.03.2008
Offline
122
#9
Васо Вчеразаши:
Уберите слеш в шаблоне поиска
$news2 = str_replace('img src="', 'img src="https://test.ru/', $news2);

В моем варианте слеши по краям служили экранами.

странно. Почему-то все равно ссылка получается не https://test.ru/image.jpg, а http://localhost/image.jpg

т.е. имя домена не меняется на test.ru

Даже интересно стало почему так может быть.

S
На сайте с 30.09.2016
Offline
469
#10
grach5:
Почему-то

Потому что не понимаешь, что делаешь.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий