Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Скачивание файла\Парс строки из файла в переменную (http://forum.oszone.net/showthread.php?t=354992)

a1ek9 29-02-2024 12:18 3024795

Скачивание файла\Парс строки из файла в переменную
 
Добрый день! Прошу помощи. Третий день уже гуляю по рунету, перерыл кучу скриптов, но довести до конца так и не смог 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 3024800

Код:

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 3024802

Цитата:

Цитата Sham
так скачивает например. »

У меня вообще сразу все закрывается. А
Цитата:

Цитата a1ek9
Подскажите пожалуйста как вытащить строку »

с этим не подскажите? тогда и curl был бы рабочим вариантом и без лишних файлов.
:help:

Sham 29-02-2024 14:07 3024803

уберите "| wget..." и выведет ссылку

a1ek9 29-02-2024 14:16 3024804

Цитата:

Цитата Sham
уберите "| wget..." и выведет ссылку »

Так же просто закрывается.
Цитата:

Цитата Sham
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 3024806

если нужен 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 3024807

Цитата:

Цитата Sham
если нужен PS »

Плохой опыт с ним, надо cmd либо сmd с какими нибудь консольными утилитами (не грамозкими). Не могу понять почему ваш первый вариант не работает, а у вас срабатывает(

Sham 29-02-2024 16:07 3024811

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

a1ek9 29-02-2024 17:04 3024815

Цитата:

Цитата Sham
(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 3024829

в cmd обычно через for вывод в переменную пишут
Код:

@for /f "tokens=* usebackq" %%f in (`powershell ...`) do @set var=%%f

a1ek9 01-03-2024 08:56 3024845

Цитата:

Цитата Sham
@for /f "tokens=* usebackq" %%f in (`powershell ...`) do @set var=%%f »

увидел свою ошибку, благодарю!

Uragan66 01-03-2024 11:09 3024852

Цитата:

Цитата a1ek9
Как в переменную это все завернуть? »

Может и на 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 3024910

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

Uragan66 02-03-2024 11:38 3024914

Цитата:

Цитата Sham
Ни class ни произвольные атрибуты не дают гарантии единственного значения. »

Возможно... Но проверил первую попавшуюся ссылку с mediafire, с "class input popsok", - всё сработало, прямая ссылка вытащилась.


Время: 04:53.

Время: 04:53.
© OSzone.net 2001-