PDA

Показать полную графическую версию : [решено] Скачивание файла\Парс строки из файла в переменную


a1ek9
29-02-2024, 12:18
Добрый день! Прошу помощи. Третий день уже гуляю по рунету, перерыл кучу скриптов, но довести до конца так и не смог xD. Воощем сама задача состоит в скачивании файла с mediafire.*** (не знаю можно нет тут линки постить). Вообщем пробовал curl и wget (wget2 только не пробовал).curl -O "https://www.mediafire.com/file/h3e51rwcr4jrh8m/iconapp.dll/file" качает file без расширения, ну понятно что это страничка загрузки файла, в этом файле есть линк на скачку файла, которую надо вытащить (так понял что по номеру строки лучше не делать парс, так как может измениться) <a class="input popsok"
aria-label="Download file"
href="https://download1586.mediafire.com/4jsacics6yigFwpWnXlh3fWPXGGxxiPcGZeHB8a4UU6cCuZ7slbzY_O2198VfoPuO3eGNlHXjSvC7gMEMXWLo1094J-ts15YX_u_rCCBGOB2ueOyXXMxkGVPEsW9F3K6sP0sDLjRtRfE80k2lrmOIVMIPr04guI1F7x90fXUHSlk4Iw/h3e51rwcr4jrh8m/iconapp.dll" id="downloadButton"
rel="nofollow">
Download (9.33MB)
</a>
Подскажите пожалуйста как вытащить строку на загрузку по прямой ссылке? Прям вот очень хочется глянуть) Парс нужен от "href="https://d" и до ". Ну или может есть какой та другой вариант? Буду очень признателен :-)

Sham
29-02-2024, 13:51
wget -qO- "https://www.mediafire.com/file/h3e51rwcr4jrh8m/iconapp.dll/file" | grep -Pozi 'aria-label="Download\sfile"\s*href="\K[^"]+' | wget -qi- так скачивает например.

a1ek9
29-02-2024, 14:02
так скачивает например. »
У меня вообще сразу все закрывается. А Подскажите пожалуйста как вытащить строку »с этим не подскажите? тогда и curl был бы рабочим вариантом и без лишних файлов.
:help:

Sham
29-02-2024, 14:07
уберите "| wget..." и выведет ссылку

a1ek9
29-02-2024, 14:16
уберите "| wget..." и выведет ссылку »Так же просто закрывается.
grep »У меня windows если что) Нашел скачал ругается на отсутствие 4х файлов (pcre3.dll, regex2.dll, libintl3.dll, libiconv2.dll) Буду искать сейчас.
upd. Зависимости все нашел, теперь вот что пишет grep: The -P and -z options cannot be combined, и файл создает .wget-hsts.

Sham
29-02-2024, 14:41
если нужен PS, то там wget это invoke-webrequest, который уже сам парсит html
(wget "https://www.mediafire.com/file/h3e51rwcr4jrh8m/iconapp.dll/file").links | ? aria-label -eq 'download file' | select -exp href

a1ek9
29-02-2024, 14:47
если нужен PS »
Плохой опыт с ним, надо cmd либо сmd с какими нибудь консольными утилитами (не грамозкими). Не могу понять почему ваш первый вариант не работает, а у вас срабатывает(

Sham
29-02-2024, 16:07
рабочий grep из MSYS2. grep из git тоже работает, то требует юникод-локаль (set LC_ALL=en_US.utf8).
"\K" (отбрасывает строку слева) требует флага -P (perl - выражения). Есть другие флаги (E и G), может и там что-то есть.

a1ek9
29-02-2024, 17:04
(wget "https://www.mediafire.com/file/h3e51rwcr4jrh8m/iconapp.dll/file").links | ? aria-label -eq 'download file' | select -exp href »
в cmd сделал, ответ верный, то что надо. Как в переменную это все завернуть? Подскажи пожалуйста!
powershell -command "(wget "https://www.mediafire.com/file/h3e51rwcr4jrh8m/iconapp.dll/file").links | ? aria-label -eq 'download file' | select -exp href"долго правда, но на первое время сойдет, парс с файла все равно допилю когда время будет.

Sham
29-02-2024, 19:10
в cmd обычно через for вывод в переменную пишут @for /f "tokens=* usebackq" %%f in (`powershell ...`) do @set var=%%f

a1ek9
01-03-2024, 08:56
@for /f "tokens=* usebackq" %%f in (`powershell ...`) do @set var=%%f »
увидел свою ошибку, благодарю!

Uragan66
01-03-2024, 11:09
Как в переменную это все завернуть? »
Может и на PS код пригодится:
$url = "https://www.mediafire.com/file/h3e51rwcr4jrh8m/iconapp.dll/file"
$link = ((Invoke-WebRequest -URI $url).Links | Where-Object {$_.class -eq "input popsok"}).href
$link
В переменной $link искомая ссылка.

Sham
02-03-2024, 08:47
Лучше конечно html-теги по атрибуту id искать (при наличии) для гарантии уникальности и единственного значения. В данном случае id -eq 'downloadbutton'. Ни class ни произвольные атрибуты не дают гарантии единственного значения.

Uragan66
02-03-2024, 11:38
Ни class ни произвольные атрибуты не дают гарантии единственного значения. »
Возможно... Но проверил первую попавшуюся ссылку с mediafire, с "class input popsok", - всё сработало, прямая ссылка вытащилась.




© OSzone.net 2001-2012