Форум об интернет-маркетинге
Вернуться   Форум об интернет-маркетинге > Технические вопросы > Веб-строительство

Ответ
 
Опции темы
Старый 30.08.2022, 17:24   #21
seokotov
se ксенофоб
Доцент
 
Аватар для seokotov
 
Регистрация: 14.07.2020
Адрес: Севастополь, Россия
Сообщений: 173
Сказал(а) спасибо: 127
Получил(а) "Спасибо": 33
Нарушения: 0/0 (0)
Репутация: 28076

Thread Starter Re: Удалить блок div из текста при парсинге

Цитата:
Сообщение от seokotov Посмотреть сообщение
хз но вот такая запись в нем работает
Код:
@INLINE {$news_content | preg_replace : '(<p(?![\S\s]*<p)[\S\s]*|<div([\S\s]*?)</div>|</div>|<a([\S\s]*?)</a>)iu'}
просто сейчас потребовалось чтобы все кроме блока read-more и социалок выдералось, раньше некоторые блоки парсились в отдельные поля типа но иногда бывало так что там не одна вставка а две из твиттера или более 1 фотки
вот и захотелось сделать так чтобы прямо все поле контента выдерало со всем содержимым кроме ненужных блоков
вот пример страницы
js-mediator-article селектор
seokotov вне форума   Ответить с цитированием
Старый 30.08.2022, 20:26   #22
XPraptor
Думаю, что надо худеть
Академик
 
Аватар для XPraptor
 
Регистрация: 22.06.2020
Сообщений: 1,791
Сказал(а) спасибо: 1,526
Получил(а) "Спасибо": 1,939
Нарушения: 0/0 (0)
Репутация: 608321

По умолчанию Re: Удалить блок div из текста при парсинге

seokotov, сам шаблон верный, вся суть как его программа забирает и какие настройки перед этим применяет.
Вместо скобок просто используйте %
Вот так попробуйте:
Код:
@INLINE {$news_content | preg_replace : '%<div class="(arcticle__read\-more read\-more|article__social\-wrapper|arcticle__read\-more read\-more|read\-more__photo)".*?>[\S\s]*?</div>%'}
Я сам шаблон на вашей странице примере попробовал прямым из php запросом- всё верно, всё меняет class="photo" не меняет.

Можете сами протестить, в файл test.txt закинуть html код страницы тестовой и в php файле выполнить:
Код:
$test_text=file_get_contents("test.txt");
$testshab='<div class="(arcticle__read\-more read\-more|article__social\-wrapper|arcticle__read\-more read\-more|read\-more__photo)".*?>[\S\s]*?</div>';
echo preg_replace("%" . $testshab . "%iu", "|||||||||||||||||||||||||||||||||", $test_text);
все дивы заменятся с классами на ||||||| а дивы с calss="photo" останутся
Состояние бота google и полезные ресурсы: всё про гугл

Последний раз редактировалось XPraptor; 30.08.2022 в 20:41.
XPraptor вне форума   Ответить с цитированием
Старый 30.08.2022, 22:06   #23
burunduk
попробуй отними
Профессор
 
Аватар для burunduk
 
Регистрация: 14.07.2020
Сообщений: 887
Сказал(а) спасибо: 1,022
Получил(а) "Спасибо": 2,087
Нарушения: 0/0 (0)
Репутация: 660509

По умолчанию Re: Удалить блок div из текста при парсинге

seokotov, я когда занимался очисткой спаршенного кода от всякого мусора, не делал больших регулярок, намного быстрее получалось прогнать 3-4 коротких чем 1 длинную,
да и самому проще контролировать результат работы и вносить правки

P.S. и ещё очень часто проще получать нужные данные сразу при парсинге средствами работы с dom чем потом разбирать регулярками
burunduk вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Старый 23.09.2022, 14:40   #24
seokotov
se ксенофоб
Доцент
 
Аватар для seokotov
 
Регистрация: 14.07.2020
Адрес: Севастополь, Россия
Сообщений: 173
Сказал(а) спасибо: 127
Получил(а) "Спасибо": 33
Нарушения: 0/0 (0)
Репутация: 28076

Thread Starter Re: Удалить блок div из текста при парсинге

ребяты а как jwplayer заставить работать?
вот код источника


а у меня вот так выводит


хотя код в принципе не трогает этот блок
Код:
@INLINE {$news_content | preg_replace : '(<div class="(arcticle__read\-more read\-more|article__social\-wrapper|arcticle__read\-more read\-more|read\-more__photo|article__google\-news\-mobile|clears mh)".*?>([\S\s]*?)</div>|</div>|<a([\S\s]*?)</a>)iu'}
seokotov вне форума   Ответить с цитированием
Старый 23.09.2022, 15:46   #25
seokotov
se ксенофоб
Доцент
 
Аватар для seokotov
 
Регистрация: 14.07.2020
Адрес: Севастополь, Россия
Сообщений: 173
Сказал(а) спасибо: 127
Получил(а) "Спасибо": 33
Нарушения: 0/0 (0)
Репутация: 28076

Thread Starter Re: Удалить блок div из текста при парсинге

а еще как удалить тег div оставив содержимое?
у меня остаются некоторые div блоки и дополнительно один лишний </div>
и летит верстка но когда ресурс сохраняется еще раз то все на место встает ничего не понимаю )
seokotov вне форума   Ответить с цитированием
Старый 23.09.2022, 22:12   #26
XPraptor
Думаю, что надо худеть
Академик
 
Аватар для XPraptor
 
Регистрация: 22.06.2020
Сообщений: 1,791
Сказал(а) спасибо: 1,526
Получил(а) "Спасибо": 1,939
Нарушения: 0/0 (0)
Репутация: 608321

По умолчанию Re: Удалить блок div из текста при парсинге

Вот эта часть в шаблоне вашем поиска: ...</div>|</div>|... заменяет окончание дива без его начала.
Перед ним шаблон с началом дива и концом, а этот шаблон после него должен вообще удалить все закрывающие дивы которые не имеют перечисленных классов в предыдущем шаблоне, зачем он?

Удалить дивы, оставив содержимое, я не могу понять что за шаблонизатор у вас (@INLINE {...), но в реальном preg_replace в php это выглядело бы так:
Код:
$news_content=preg_replace("%<div.*?>([\S\s]*?)</div>%iu", "$1", $news_content);
то есть мы удаляем все теги div с любыми текстами классов и прочих опций, контент между ними, и вместо них ставим чистый контент который был между этими дивами.
XPraptor вне форума   Ответить с цитированием
Старый 05.10.2022, 15:55   #27
seokotov
se ксенофоб
Доцент
 
Аватар для seokotov
 
Регистрация: 14.07.2020
Адрес: Севастополь, Россия
Сообщений: 173
Сказал(а) спасибо: 127
Получил(а) "Спасибо": 33
Нарушения: 0/0 (0)
Репутация: 28076

Thread Starter Re: Удалить блок div из текста при парсинге

новое веселье. хочу удалить блок полностью НО

есть в источнике такой блок
Код:
<div class="cross-links"><ul><li><a href="/world/1395744-%D8%A7%D9%84%D8%B1%D8%A6%D9%8A%D8%B3-%D8%A7%D9%84%D8%A3%D9%88%D9%83%D8%B1%D8%A7%D9%86%D9%8A-%D9%8A%D9%88%D9%82%D8%B9-%D9%85%D8%B1%D8%B3%D9%88%D9%85%D8%A7-%D8%B1%D9%81%D8%B6-%D8%A3%D9%8A-%D9%85%D9%81%D8%A7%D9%88%D8%B6%D8%A7%D8%AA-%D8%A8%D9%88%D8%AA%D9%8A%D9%86/"><div class="photo"><picture><!--[if IE 9]><video style="display: none;"><![endif]--><source media="(-webkit-min-device-pixel-ratio: 2) and (min-resolution: 120dpi)" data-srcset="
                    https://cdni.russiatoday.com/media/pics/2022.10/xxs/633c10b54c59b724f66d2bfb.jpg 560w,
                    https://cdni.russiatoday.com/media/pics/2022.10/xs/633c10b54c59b724f66d2bfb.jpg 640w,
                    https://cdni.russiatoday.com/media/pics/2022.10/thumbnail/633c10b54c59b724f66d2bfb.jpg 920w,
                    https://cdni.russiatoday.com/media/pics/2022.10/m/633c10b54c59b724f66d2bfb.jpg 1080w,
                    https://cdni.russiatoday.com/media/pics/2022.10/l/633c10b54c59b724f66d2bfb.jpg 1536w,
                    https://cdni.russiatoday.com/media/pics/2022.10/article/633c10b54c59b724f66d2bfb.jpg 1960w,
                    https://cdni.russiatoday.com/media/pics/2022.10/xxl/633c10b54c59b724f66d2bfb.jpg 2480w
                " srcset="
                    https://cdni.russiatoday.com/media/pics/2022.10/xxs/633c10b54c59b724f66d2bfb.jpg 560w,
                    https://cdni.russiatoday.com/media/pics/2022.10/xs/633c10b54c59b724f66d2bfb.jpg 640w,
                    https://cdni.russiatoday.com/media/pics/2022.10/thumbnail/633c10b54c59b724f66d2bfb.jpg 920w,
                    https://cdni.russiatoday.com/media/pics/2022.10/m/633c10b54c59b724f66d2bfb.jpg 1080w,
                    https://cdni.russiatoday.com/media/pics/2022.10/l/633c10b54c59b724f66d2bfb.jpg 1536w,
                    https://cdni.russiatoday.com/media/pics/2022.10/article/633c10b54c59b724f66d2bfb.jpg 1960w,
                    https://cdni.russiatoday.com/media/pics/2022.10/xxl/633c10b54c59b724f66d2bfb.jpg 2480w
                " sizes="148px"><source data-srcset="
                    https://cdni.russiatoday.com/media/pics/2022.10/xxs/633c10b54c59b724f66d2bfb.jpg 280w,
                    https://cdni.russiatoday.com/media/pics/2022.10/xs/633c10b54c59b724f66d2bfb.jpg 320w,
                    https://cdni.russiatoday.com/media/pics/2022.10/thumbnail/633c10b54c59b724f66d2bfb.jpg 460w,
                    https://cdni.russiatoday.com/media/pics/2022.10/m/633c10b54c59b724f66d2bfb.jpg 540w,
                    https://cdni.russiatoday.com/media/pics/2022.10/l/633c10b54c59b724f66d2bfb.jpg 768w,
                    https://cdni.russiatoday.com/media/pics/2022.10/article/633c10b54c59b724f66d2bfb.jpg 980w,
                    https://cdni.russiatoday.com/media/pics/2022.10/xxl/633c10b54c59b724f66d2bfb.jpg 1240w
                " srcset="
                    https://cdni.russiatoday.com/media/pics/2022.10/xxs/633c10b54c59b724f66d2bfb.jpg 280w,
                    https://cdni.russiatoday.com/media/pics/2022.10/xs/633c10b54c59b724f66d2bfb.jpg 320w,
                    https://cdni.russiatoday.com/media/pics/2022.10/thumbnail/633c10b54c59b724f66d2bfb.jpg 460w,
                    https://cdni.russiatoday.com/media/pics/2022.10/m/633c10b54c59b724f66d2bfb.jpg 540w,
                    https://cdni.russiatoday.com/media/pics/2022.10/l/633c10b54c59b724f66d2bfb.jpg 768w,
                    https://cdni.russiatoday.com/media/pics/2022.10/article/633c10b54c59b724f66d2bfb.jpg 980w,
                    https://cdni.russiatoday.com/media/pics/2022.10/xxl/633c10b54c59b724f66d2bfb.jpg 1240w
                " sizes="148px"><!--[if IE 9]></video><![endif]--><img data-sizes="auto" src="https://cdni.russiatoday.com/media/pics/2022.10/xxs/633c10b54c59b724f66d2bfb.jpg" class="lazyautosizes js-lazysize_loaded" data-src="https://cdni.russiatoday.com/media/pics/2022.10/xxs/633c10b54c59b724f66d2bfb.jpg" alt="الكرملين يعلق على إغلاق كييف باب التفاوض مع موسكو" sizes="148px"></picture><!-- noscript pattern --><noscript><img src="https://cdni.russiatoday.com/media/pics/2022.10/original/633c10b54c59b724f66d2bfb.jpg" alt="الكرملين يعلق على إغلاق كييف باب التفاوض مع موسكو" /></noscript></div>
                                            الرئيس الأوكراني يوقع مرسوما بشأن "رفض أي مفاوضات مع بوتين"
                    </a></li></ul></div>
пишу
Код:
@INLINE {$news_content | preg_replace : '(<div class="(cross\-links|arcticle__read\-more read\-more|article__social\-wrapper|arcticle__read\-more read\-more|read\-more__photo)".*?>[\S\s]*?</div>|<a([\S\s]*?)</a>)iu'}
он мне оставляет от него такой трэш
Цитата:
الرئيس الأوكراني يوقع مرسوما بشأن "رفض أي مفاوضات مع بوتين"
</a></li></ul></div>
seokotov вне форума   Ответить с цитированием
Старый 05.10.2022, 16:04   #28
XPraptor
Думаю, что надо худеть
Академик
 
Аватар для XPraptor
 
Регистрация: 22.06.2020
Сообщений: 1,791
Сказал(а) спасибо: 1,526
Получил(а) "Спасибо": 1,939
Нарушения: 0/0 (0)
Репутация: 608321

По умолчанию Re: Удалить блок div из текста при парсинге

<div class="(cross\-links наступает раньше <a
а в конце </a>также наступает и для <div class="(cross\-links
XPraptor вне форума   Ответить с цитированием
Старый 06.10.2022, 16:03   #29
seokotov
se ксенофоб
Доцент
 
Аватар для seokotov
 
Регистрация: 14.07.2020
Адрес: Севастополь, Россия
Сообщений: 173
Сказал(а) спасибо: 127
Получил(а) "Спасибо": 33
Нарушения: 0/0 (0)
Репутация: 28076

Thread Starter Re: Удалить блок div из текста при парсинге

Цитата:
Сообщение от XPraptor Посмотреть сообщение
<div class="(cross\-links наступает раньше <a
а в конце </a>также наступает и для <div class="(cross\-links
что это значит? непобедить?
seokotov вне форума   Ответить с цитированием
Старый 06.10.2022, 21:40   #30
XPraptor
Думаю, что надо худеть
Академик
 
Аватар для XPraptor
 
Регистрация: 22.06.2020
Сообщений: 1,791
Сказал(а) спасибо: 1,526
Получил(а) "Спасибо": 1,939
Нарушения: 0/0 (0)
Репутация: 608321

По умолчанию Re: Удалить блок div из текста при парсинге

Почему не победить - просто там не верная html разметка, потеряны теги, нужно выполнять отдельно, сначала выполнить замену <a([\S\s]*?)</a>
А потом уже дивы.
XPraptor вне форума   Ответить с цитированием
Сказали спасибо:
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
РСЯ - Полноэкранный мобильный блок ziliboba0213 РСЯ, Google AdSense и Youtube 25 17.03.2022 14:48
Как сделать блок Адсенс 970х250? Had РСЯ, Google AdSense и Youtube 8 10.10.2021 21:03
Удалить из текста все div'ы с содержимым seokotov Веб-строительство 19 09.01.2021 20:40
Блок ссылок от G medexpert Веб-строительство 28 23.12.2020 06:13
Как сделать именно такой блок РСЯ? Had РСЯ, Google AdSense и Youtube 4 16.10.2020 10:52


Текущее время: 23:26. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc. Перевод: zCarot