@UserTrue
Когда искал по форуму, часто встречал ответы этого пользователя. Если найдется минутка, поделитесь опытом. Пока выделил два возможных решения замены curl http. Может есть еще варианты? Какой вариант для вас лучше?
Помогите с регуляркой, пожалуйста.
-
Нужно с текста ниже достать ссылки и текст перед ними:
«Если одна из них “садится” на стену, то сестричка обязательно должна сделать так же»</em></strong></p> <figure><img src="https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/8.jpgНужно учитывать:
https://site.com/storage - не изменный текст
/2020/s/sobaki-s-milymi-strannostyami/ - изменяется
8.jpg - от 1.jpg до 30.jpgСам текст:
</figure> <p class="note">Фото: <a href="https://www.reddit.com/r/funny/comments/f2fhx6/my_dog_is_a_bit_of_a_freak_when_the_camera_comes/">Reddit</a></p> <p><strong><em>«Если одна из них “садится” на стену, то сестричка обязательно должна сделать так же»</em></strong></p> <figure><img src="https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/8.jpg" alt=""></figure> <p class="note">Фото: <a href="https://www.reddit.com/r/WhatsWrongWithYourDog/comments/aiogw2/when_one_sits_on_the_wall_obviously_the_other_has/">Reddit</a></p> <p><strong>Похоже, кто-то здесь не в восторге от высоты</strong></p> <figure><img src="https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/9.jpg" alt=""></figure> <p class="note">Фото: <a href="https://www.reddit.com/r/WhatsWrongWithYourDog/comments/f5ibvv/not_going_any_higher_on_this_stupid_hike/">Reddit</a></p> <p><strong>До и после прогулки</strong></p> <figure><img src=" -
Вам не нужна регулярка, используйте xpath //p[@class="note"] для текста и //p[@class="note"]/@href для ссылок
-
@UserTrue said in Помогите с регуляркой, пожалуйста.:
//p[@class="note"]
По "note" это не та ссылка и текст которая мне нужна. Посмотрите, пожалуйста, еще раз.
И мне нужно знать что над ссылкой https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/8.jpg стоит текст, который описывает эту фото. Тоесть если это ссылка на фото 8.jpg то мне нужет текст, который располагается над ней и сохранить этот текст в таком формате 8.txt
Как сохранять я знаю, вот только как спарсить мучаюсь вторые сутки. -
Вот это нужно мне:
«Если одна из них “садится” на стену, то сестричка обязательно должна сделать так же»</em></strong></p> <figure><img src="https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/8.jpg"
Похоже, кто-то здесь не в восторге от высоты</strong></p> <figure><img src="https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/9.jpg"
-
@UserTrue К сожалению не подходит, на другой странице сайта уже другая картина:
width="100%" height="600"></iframe></figure> <p>По ее мнению, игрок-мужчина никогда бы не получил предупреждение за резкое высказывание. <i>«Я неоднократно наблюдала, как резко мужчины называли судей, но те никогда их не наказывали. Я здесь, чтобы бороться за права и равенство женщин. И я считаю сексизмом то, что он отнял у меня гейм, когда я назвала его вором»,</i> — отметила Уильямс.</p> <figure data-feedback="fb:likes, fb:comments"><img src="https://site.com/storage/2018/s/serena-uilyams-proigrala-yaponke/4.jpg"></figure> <!-- Composite Start --> <div id="M459225ScriptRootC704163"> <div id="M459225PreloadC704163"> Loading... </div> <script> (function(){ var D=new Date(),d=document,b='body',ce='createElement',ac='appendChild',st='style',ds='display',n='none',gi='getElementById',lp=d.location.protocol,wp=lp.indexOf('http')==0?lp:'https:'; var i=d[ce]('iframe');i[st][ds]=n;d[gi]("M459225ScriptRootC704163")[ac](i);try{var iw=i.contentWindow.document;iw.open();iw.writeln("<ht"+"ml><bo"+"dy></bo"+"dy></ht"+"ml>");iw.close();var c=iw[b];} catch(e){var iw=d;var c=d[gi]("M459225ScriptRootC704163");}var dv=iw[ce]('div');dv.id="MG_ID";dv[st][ds]=n;dv.innerHTML=704163;c[ac](dv); var s=iw[ce]('script');s.async='async';s.defer='defer';s.charset='utf-8';s.src=wp+"//jsc.mgid.com/o/f/ofigenno.com.704163.js?t="+D.getUTCFullYear()+D.getUTCMonth()+D.getUTCDate()+D.getUTCHours();c[ac](s);})(); </script><iframe style="display: none;"></iframe> </div> <!-- Composite End --><figure data-feedback="fb:likes, fb:comments"><img src="https://site.com/storage/2018/s/serena-uilyams-proigrala-yaponke/5.jpg"></figure> <p>Профессиональные теннисисты и журналисты раскритиковали поведение Серены. Ее выпад против судьи сочли не иначе как истерикой и обвинили Уильямс в том, что она просто не умеет проигрывать. Канадец Грег Руседски заявил, что Уильямс нужно извиниться перед Осакой, ведь она испортила японке первую большую победу.</p> <figure data-feedback="fb:likes, fb:comments"><img src="https://site.com/storage/2018/s/serena-uilyams-proigrala-yaponke/6.jpg"></figure> <div class="ad intext">Получается нужно отталкиваться все таки от ссылки и смотреть выше от нее текст.
-
@wladeeck said in Помогите с регуляркой, пожалуйста.:
@UserTrue К сожалению не подходит, на другой странице сайта уже другая картина:
width="100%" height="600"></iframe></figure> <p>По ее мнению, игрок-мужчина никогда бы не получил предупреждение за резкое высказывание. <i>«Я неоднократно наблюдала, как резко мужчины называли судей, но те никогда их не наказывали. Я здесь, чтобы бороться за права и равенство женщин. И я считаю сексизмом то, что он отнял у меня гейм, когда я назвала его вором»,</i> — отметила Уильямс.</p> <figure data-feedback="fb:likes, fb:comments"><img src="https://site.com/storage/2018/s/serena-uilyams-proigrala-yaponke/4.jpg"></figure> <!-- Composite Start --> <div id="M459225ScriptRootC704163"> <div id="M459225PreloadC704163"> Loading... </div> <script> (function(){ var D=new Date(),d=document,b='body',ce='createElement',ac='appendChild',st='style',ds='display',n='none',gi='getElementById',lp=d.location.protocol,wp=lp.indexOf('http')==0?lp:'https:'; var i=d[ce]('iframe');i[st][ds]=n;d[gi]("M459225ScriptRootC704163")[ac](i);try{var iw=i.contentWindow.document;iw.open();iw.writeln("<ht"+"ml><bo"+"dy></bo"+"dy></ht"+"ml>");iw.close();var c=iw[b];} catch(e){var iw=d;var c=d[gi]("M459225ScriptRootC704163");}var dv=iw[ce]('div');dv.id="MG_ID";dv[st][ds]=n;dv.innerHTML=704163;c[ac](dv); var s=iw[ce]('script');s.async='async';s.defer='defer';s.charset='utf-8';s.src=wp+"//jsc.mgid.com/o/f/ofigenno.com.704163.js?t="+D.getUTCFullYear()+D.getUTCMonth()+D.getUTCDate()+D.getUTCHours();c[ac](s);})(); </script><iframe style="display: none;"></iframe> </div> <!-- Composite End --><figure data-feedback="fb:likes, fb:comments"><img src="https://site.com/storage/2018/s/serena-uilyams-proigrala-yaponke/5.jpg"></figure> <p>Профессиональные теннисисты и журналисты раскритиковали поведение Серены. Ее выпад против судьи сочли не иначе как истерикой и обвинили Уильямс в том, что она просто не умеет проигрывать. Канадец Грег Руседски заявил, что Уильямс нужно извиниться перед Осакой, ведь она испортила японке первую большую победу.</p> <figure data-feedback="fb:likes, fb:comments"><img src="https://site.com/storage/2018/s/serena-uilyams-proigrala-yaponke/6.jpg"></figure> <div class="ad intext">Получается нужно отталкиваться все таки от ссылки и смотреть выше от нее текст.
Вы бы лучше привели пример всей страницы, или лучше сразу нескольких, чтобы сразу проверять решение, а не ждать от вас ответа работает\не работает.
-
Для того текста, который вы указали здесь, подойдёт такая регулярка:
<p>([\s\S]*?)<\/p>[\s\S]*?img src="(.*?)"можете проверить здесь https://regex101.com/r/mweOIm/1
Используйте действие "Первое вхождение", в переменной GROUP1 будет текст, а в GROUP2 ссылка
-
@Fox Не совсем помогло.
Я избавился от лишнего "Извлеч все данные" <p>.*</p>
- Получаю текст:
- <p>Климатологи отмечают, что нынешний июнь стал самым жарким за всю историю наблюдений, что определенно говорит об изменении климата на планете.</p> <figure><img src="https://site.com/storage/2019/a/anomalnaya-zhara-v-evrope/11.jpg" alt=""></figure> <p>Эмманюэль Макрон и вовсе прямым текстом заговорил о глобальном потеплении и подчеркнул, что <a href="https://site.com/kak-vestsi-ekologicheskiy-stil-zhizni">нынешних мер по борьбе с ним недостаточно</a>. </p> <figure><img src="https://site.com/storage/2019/a/anomalnaya-zhara-v-evrope/12.jpg" alt=""></figure> <p>Не так давно мы писали о том, что <a href="https://site.com/rekordnoe-tayanie-ldov-v-grenlandii">растаяли льды в Гренландии</a>. И хотя это тоже сезонное явление, ученые всего мира видят огромные проблемы. Человечество всё-таки довело планету до серьезных климатических изменений, и кто знает, что нам теперь сулит будущее.</p>"
-
С вашей помощью я извлек все ссылки (беру например: https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/11.jpg)
-
И получаю регуляркой русский текст который расположен над ссылкой: "Извлечь все данные":
([\—\”\“\№)([][{}\«\»=<>^.,-_'"@?!:$\0-9А-Яа-яёЁ( )]+)([)([][{}\«\»=<>^.,-_'"@?!:$\0-9a-zA-ZА( )]+)https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/11.jpg -
Получаю результат:
Климатологи отмечают, что нынешний июнь стал самым жарким за всю историю наблюдений, что определенно говорит об изменении климата на планете.</
Все работает, как нужно, только работает в конструкторе а в БАСе выдает пустой результат(использую "Извлечь все данные").
Также происходит проблема если в извлеченном тексте присутствуют английские слова, например:
- <p><strong><em>«Если одна из них “садится” на стену, то sister обязательно должна сделать так же»</em></strong></p> <figure><img src="https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/11.jpg" alt=""></figure>
-
@wladeeck said in Помогите с регуляркой, пожалуйста.:
@Fox Не совсем помогло.
Я избавился от лишнего "Извлеч все данные" <p>.*</p>
- Получаю текст:
- <p>Климатологи отмечают, что нынешний июнь стал самым жарким за всю историю наблюдений, что определенно говорит об изменении климата на планете.</p> <figure><img src="https://site.com/storage/2019/a/anomalnaya-zhara-v-evrope/11.jpg" alt=""></figure> <p>Эмманюэль Макрон и вовсе прямым текстом заговорил о глобальном потеплении и подчеркнул, что <a href="https://site.com/kak-vestsi-ekologicheskiy-stil-zhizni">нынешних мер по борьбе с ним недостаточно</a>. </p> <figure><img src="https://site.com/storage/2019/a/anomalnaya-zhara-v-evrope/12.jpg" alt=""></figure> <p>Не так давно мы писали о том, что <a href="https://site.com/rekordnoe-tayanie-ldov-v-grenlandii">растаяли льды в Гренландии</a>. И хотя это тоже сезонное явление, ученые всего мира видят огромные проблемы. Человечество всё-таки довело планету до серьезных климатических изменений, и кто знает, что нам теперь сулит будущее.</p>"
-
С вашей помощью я извлек все ссылки (беру например: https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/11.jpg)
-
И получаю регуляркой русский текст который расположен над ссылкой: "Извлечь все данные":
([\—\”\“\№)([][{}\«\»=<>^.,-_'"@?!:$\0-9А-Яа-яёЁ( )]+)([)([][{}\«\»=<>^.,-_'"@?!:$\0-9a-zA-ZА( )]+)https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/11.jpg -
Получаю результат:
Климатологи отмечают, что нынешний июнь стал самым жарким за всю историю наблюдений, что определенно говорит об изменении климата на планете.</
Все работает, как нужно, только работает в конструкторе а в БАСе выдает пустой результат(использую "Извлечь все данные").
Также происходит проблема если в извлеченном тексте присутствуют английские слова, например:
- <p><strong><em>«Если одна из них “садится” на стену, то sister обязательно должна сделать так же»</em></strong></p> <figure><img src="https://site.com/storage/2020/s/sobaki-s-milymi-strannostyami/11.jpg" alt=""></figure>
Боже мой.. бедный интерпретатор регулярного выражения, ему же перебирать оба ваших диапазона
([\—\”\“\№)([][{}\«\»=<>^.,-_'"@?!:$\0-9А-Яа-яёЁ( )]+)([)([][{}\«\»=<>^.,-_'"@?!:$\0-9a-zA-ZА( )]+)к полному коду html страницы на каждый блин символ диапазона...
В действии "Извлечь все данные" не работают группы, именно по этому я указал использовать действие "Первое вхождение"
Я привёл вам рабочую регулярку для вашей ситуации, она работает с текстом, который вы привели в пример, дальнейшее гадание на кофейной гуще работает-неработает считаю бессмысленной тратой времени. Или приводите пример страницы и задачи, которую нужно выполнить на этой странице или не мучайте регулярки