Нужно "вытянуть" из данной строки конкретный адрес сайта

Мне вздумалось сделать скрипт, который будет раз в неделю заходить на сайт doomguy.ru и скачивать оттуда свежий мод. Я догадался в скрипте сначала скопировать текст страницы с модами в файл, из этого файла выявить одну строку с адресом странички мода. Проблема в том, что сам адрес, допустим https://doomguy.ru/50-monsters-doom2-megawad.html смешан с еще кучей всего в той же строке:

<a class="feature-img" href="***https://doomguy.ru/50-monsters-doom2-megawad.html***" rel="bookmark" title="Перейти к записи Бодрый мегавад 50 Monsters для Doom II Маленький проект, но с большой душой"><img width="1190" height="897"   alt="50 monsters" loading="lazy" data-srcset="https://doomguy.ru/wp-content/uploads/2020/07/50-monsters.jpg 1190w, https://doomguy.ru/wp-content/uploads/2020/07/50-monsters-400x302.jpg 400w, https://doomguy.ru/wp-content/uploads/2020/07/50-monsters-1024x772.jpg 1024w, https://doomguy.ru/wp-content/uploads/2020/07/50-monsters-768x579.jpg 768w"  data-src="https://doomguy.ru/wp-content/uploads/2020/07/50-monsters.jpg" data-sizes="(max-width: 1190px) 100vw, 1190px" class="attachment-retro-featured-large size-retro-featured-large wp-post-image lazyload" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /><noscript><img width="1190" height="897" src="https://doomguy.ru/wp-content/uploads/2020/07/50-monsters.jpg" class="attachment-retro-featured-large size-retro-featured-large wp-post-image" alt="50 monsters" loading="lazy" srcset="https://doomguy.ru/wp-content/uploads/2020/07/50-monsters.jpg 1190w, https://doomguy.ru/wp-content/uploads/2020/07/50-monsters-400x302.jpg 400w, https://doomguy.ru/wp-content/uploads/2020/07/50-monsters-1024x772.jpg 1024w, https://doomguy.ru/wp-content/uploads/2020/07/50-monsters-768x579.jpg 768w" sizes="(max-width: 1190px) 100vw, 1190px" /></noscript></a>

Нужно каким-то образом из этой строки достать этот самый адрес, чтобы далее перейти по нему и скачать то, что нужно. Я пробовал утилитой cut, но либо плохо пробовал, либо она не подходит.


Ответы (3 шт):

Автор решения: Denis Rudnitskiy

Как реализовать с помощью средств или команд linux я не знаю, но одним из вариантов могу посоветовать это сделать с помощью ЯП python, и использованием библиотеки bs4.

import requests
from bs4 import BeautifulSoup

url = '' # ваша ссылка
r = requests.get(url)
soup = BeautifulSoup(r.text, "html.parser")
something = # здесь нужно будет дописать некоторый код, для поиска того html, который вы привели
soup.select_one(something).get('href')`

Как альтернативный вариант - можете записать эту ссылку в текстовый файл, и потом сможете считать его средствами linux:)

→ Ссылка
Автор решения: Vitto74

Вот эта команда

egrep -o 'https://doomguy.ru/.*.html'

Выведет ссылку, которая тебе нужна. Далее её можно передать в wget или curl с помощью xargs

→ Ссылка
Автор решения: Johan Palych

getlinks

get from a remote file to STDOUT:

wget -qO- https://www.membrane-australasia.org/gallery/imstec-2016-adelaide-part-3/ | grep -Eoi '<a [^>]+>' | grep -Eo 'href="[^"]+"' | grep -Eo '(http|https)://[a-zA-Z0-9./?=_-]*' | uniq

get from a remote file to xargs and download each URL

wget -qO- https://www.membrane-australasia.org/gallery/imstec-2016-adelaide-part-1/ | grep -Eoi '<a [^>]+>' | grep -Eo 'href="[^"]+"' | grep -Eo '(http|https)://[a-zA-Z0-9./?=_-]*' | uniq | xargs -n 1 -P 24 curl -LO

local file version:

grep -Eoi '<a [^>]+>' file.htm | grep -Eo 'href="[^"]+"' | grep -Eo '(http|https)://[a-zA-Z0-9./?=_-]*' | uniq

How to use grep and cut in script to obtain website URLs from an HTML file

Ну просто поискать: Как использовать grep и cut в скрипте для получения URL сайта из файла HTML

→ Ссылка