извлеките URL из html-файлов и каким-то образом выберите лучший - PullRequest
0 голосов
/ 06 мая 2019

У меня есть много (думаю, 17000) HTML-файлов, которые содержат ссылки. Каждый HTML-файл может содержать много ссылок, но все они ссылаются на одно и то же видео mp4, но в разных разрешениях. Я хочу выделить только ссылку с самым высоким разрешением, т.е. если есть ссылка на 720, 1080 или 1440, я хочу ссылку для 1440 и не беспокоиться с другими. Максимальное разрешение варьируется, поэтому я не могу просто жестко кодировать 1440 (максимальное разрешение в одном HTML-файле может быть 720, в другом, например, 1440).

Содержимое html-файлов имеет размер от 2 до 80 Кбайт и содержит повторяющееся содержимое, имеющее такую ​​структуру, иногда в одной строке, иногда занимающее несколько строк

{"url":"https://localhost/676/hg66333/56354446353.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01", 
uploadedBy="fdb778f8-c347-4c28-90f4-d8be4b4a20f0", 
 owner="3ba62dba-8fb1-468d-8349-2e42a5330785",video="1024p", 
   group="a4307f09-4804-4802-9ba4-8e8eaf3d3439"},
   {"url":"https://localhost/676/hg66333/56354446384.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01", 
 uploadedBy="fdb778f8-c347-4c28-90f4-d8be4b4a20f0", 
       owner="3ba62dba-8fb1-468d-8349-2e42a5330785",
    video="720p", group="a4307f09-4804-4802-9ba4-8e8eaf3d3439"}

Что я хочу от grep это просто

https://localhost/676/hg66333/56354446353.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01

И НЕ (так как это более низкое разрешение, самое высокое разрешение в одном файле i 1024, более низкое разрешение 720)

https://localhost/676/hg66333/56354446384.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01

Я просто не могу найти решение, используя grep -oh и '\ "url \": \ "https://localhost[^"]*

Я думаю, что мне нужно сделать, чтобы получить все URL, и видео =, отсортировать по URL, затем видео с наивысшего к низшему, и взять верхний, но ..... Я понятия не имею, и теперь я просто шарить, пытаясь найти что-то, что я могу найти в Google, и меняя его.

Может кто-нибудь помочь?

О, mp4 всегда появляется раньше, чем качество видео

Я использую Darwin MacBook-Pro.local 18.6.0 Darwin Kernel Версия 18.6.0: Четверг, 25 23:49:07 PDT 2019; root: xnu-4903.261.4 ~ 4 / RELEASE_X86_64 x86_64

1 Ответ

2 голосов
/ 07 мая 2019

Использование стандартных инструментов UNIX, включая любой awk в любой оболочке на любом компьютере UNIX:

$ cat tst.awk
BEGIN { OFS="\t" }
{
    while ( match($0,/("url":|[[:alpha:]]+=)"[^"]+"/) ) {
        tag = val = substr($0,RSTART,RLENGTH)
        $0 = substr($0,RSTART+RLENGTH)
        sub(/[:=].*/,"",tag)
        sub(/[^:=]*[:=]/,"",val)
        gsub(/^"|"$/,"",tag)
        gsub(/^"|"$/,"",val)
        f[tag] = val
        if ( tag == "video" ) {
            print f["video"], f["url"]
        }
    }
}

.

$ awk -f tst.awk file
1024p   https://localhost/676/hg66333/56354446353.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
720p    https://localhost/676/hg66333/56354446384.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
$
$ awk -f tst.awk file | sort -n
720p    https://localhost/676/hg66333/56354446384.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
1024p   https://localhost/676/hg66333/56354446353.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
$
$ awk -f tst.awk file | sort -rn
1024p   https://localhost/676/hg66333/56354446353.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
720p    https://localhost/676/hg66333/56354446384.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
$
$ awk -f tst.awk file | sort -rn | head -1
1024p   https://localhost/676/hg66333/56354446353.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01
$
$ awk -f tst.awk file | sort -rn | head -1 | cut -f2
https://localhost/676/hg66333/56354446353.mp4?user=893668f5-8fab-4916-9697-f45aee61aa01

Все, на что он полагается, это то, что любая данная строка тега = значения сама по себе не разбита на строки и все они следуют формату, который вы указали в своем вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...