Пакет-получение url-адреса файла из html-документа

Я хочу использовать curl для загрузки последней версии этот файл. На сайте есть роботы.txt, однако, что, как я думаю, мешает мне просто использовать curl -L -z WorldGuard.zip http://www.curse.com/server-mods/minecraft/worldguard/download чтобы получить его. Есть прямая ссылка http://addons.curse.cursecdn.com/files/684/741/worldguard-5.7.3.zip в файл, который находится в html исходном коде страницы и I can используйте эту ссылку, чтобы свернуть ее, так как эта ссылка не является постоянной, мне нужно найти способ получить этот url из первой ссылки (которая является постоянной ссылкой).

если я использую curl -L http://www.curse.com/server-mods/minecraft/worldguard/downloadС этой как выход. Я пробовал использовать FOR /F "skip=628 tokens=10,11,12,13,14 delims=/ " %%a in ('curl -L http://www.curse.com/server-mods/minecraft/worldguard/download') DO curl -z foo.zip %%a') но у меня есть ограничение на то, сколько строк я могу пропустить (аналогично пределу токена 31), и это, вероятно, дало бы мне все строки после этого (не то, что я хочу).

затем я попытался сохранить вывод в текстовый файл и удалить все строки, кроме той, которую я хочу, однако я не знаю, как удалить строки, которые не содержат определенной строки. Я думал сосредоточиться только на строки, которые имели "http://addons.curse.cursecdn.com/files/" (другими словами, строка, в которой был url-адрес, который я хотел), но я понятия не имею, как это сделать.

как я могу получить только url (или часть, которая изменяется:684/741/worldguard-5.7.3.zip) и, следовательно, получить curl, чтобы загрузить его?

Edit: я открыт для альтернатив, если нет простого способа сделать это в пакетном скрипте и / или использовать curl. Я готов принять ответы, которые используют visual basic (.vbs.), powershell или что-либо, что может быть выполнено из пакетного файла (который должен быть почти все). Я все еще предпочитаю использовать batch и curl, чтобы сохранить его согласованным и в одном файле, и потому, что у меня уже есть 90% того, что я хочу в batch. Кроме того, я не так хорошо знаком с вещами, которые не являются пакетными, поэтому я предпочел бы, чтобы вы объяснили, что делает сценарий.

27
задан Craft1n3ss
26.11.2022 4:55 Количество просмотров материала 2784
Распечатать страницу

3 ответа

следующие команды будут искать строку, содержащую ссылку для загрузки .htm-файл и использует быстрый и грязный метод извлечения URL-адреса из этой строки. Он не очень надежен, но он должен работать до тех пор, пока html, используемый для строки "Если ваша загрузка не начнется, нажмите здесь", не будет радикально изменен.

for /F "tokens=4 delims==" %i in ('findstr download-link source.htm') do 
    @set match=%i
set zipurl=%match:~1,-7%
echo %zipurl%|findstr /R ^http://.*\.zip$

атрибут 'class="download-link"' предоставляет тег, который ссылается на .сжатый файл. Используя знак равенства в качестве разделителя, четвертый знак будет "http://addons.[...].zip" class. Для избавления от окружающих кавычек и слова "class", подстрока %match% хранящийся в %zipurl%. Третья строка несколько необязательна, но может использоваться для проверки работы скрипта. Наборы Findstr %errorlevel% до нуля, если извлеченный URL начинался с 'http: / /' и заканчивался '.zip-архив, и устанавливает его в противном случае.

для использования в пакетном файле, заменить %i С %%i.

0
отвечен Marcks Thomas 2022-11-27 12:43

...однако я не знаю, как удалить строки, которые не содержат определенной строки...

удаление строк не содержат определенную строку, см. Этот пост регулярное выражение для сопоставления строки, не содержащей слова

в сообщении есть больше информации, и предоставляются различные другие ответы, но основы этого ответа:

вы смогли использовать комбинация sed и grep (или sed и find) для фильтрации строк файла.

  1. поиск / замена всего файла, чтобы добавить уникальный " тег " в начало каждой строки, которая содержит любой текст.
  2. для всех строк, содержащих target string, удалить уникальный " тег " из начала строки.
  3. At это точка, все строки, которые начинаются с уникального "тега",не содержат target строку. Теперь вы можете delete (или сделайте "что-то еще") только для этих строк.
0
отвечен Kevin Fegan 2022-11-27 15:00

вы могли бы сделать это в несколько шагов меньше, используя sed и grep, но вот решение, использующее только встроенные команды.

@echo off

rem    edit next line to include your filename    
set "zzfilename=captured-page.html"

rem    get the target line
type "%zzfilename%"|find /i "data-href"|find /i ".zip">"zztarget.txt"
for /f "usebackq delims=" %%f in (`type "zztarget.txt"`) do set zzaaa=%%f

rem    change double-quotes to single-quotes
set "zzaaa1=%zzaaa:"='%"

rem    remove unneeded text from the beginning of the line
set "zzaaa2=%zzaaa1:*data-href=gotit%"

rem    remove the "<" and ">" characters
set "zzaaa3=%zzaaa2:<='%"
set "zzaaa4=%zzaaa3:>='%"

rem    from what remains, take only the desired URL
for /f "usebackq tokens=2 delims='" %%f in (`echo %zzaaa4%`) do set "zzgotit=%%f"

rem    show the work and cleanup
set zz
set "zzaaa="
set "zzaaa1="
set "zzaaa2="
set "zzaaa3="
set "zzaaa4="
del "zztarget.txt">nul 2>&1

полный URL будет в переменной zzgotit.

0
отвечен Kevin Fegan 2022-11-27 17:17

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх