Нужно "вытянуть" из данной строки конкретный адрес сайта
Мне вздумалось сделать скрипт, который будет раз в неделю заходить на сайт 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 шт):
Как реализовать с помощью средств или команд 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:)
Вот эта команда
egrep -o 'https://doomguy.ru/.*.html'
Выведет ссылку, которая тебе нужна. Далее её можно передать в wget или curl с помощью xargs
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