Я хочу извлечь ссылку из страницы HTML для загрузки моих изображений, и у меня есть несколько тысяч этих файлов HTML. Как я иду об этом?

таким образом, у меня есть файлы HTML, которые имеют определенную часть, я хотел бы извлечь. Эти адреса HTML находятся в текстовом файле. Демонстрационная веб-страница HTML, взятая из этого текстового файла, была бы похожа на это, и я захочу получить часть 009514HB.JPG, который отличается для каждого файла HTML.

Мой .txt файл был бы чем-то вроде этого -

    https://www.dermquest.com/image-library/image/5044bfd0c97267166cd653c8
https://www.dermquest.com/image-library/image/5044bfcfc97267166cd61ff4
https://www.dermquest.com/image-library/image/5044bfd0c97267166cd6310a
https://www.dermquest.com/image-library/image/5044bfd0c97267166cd6310b
https://www.dermquest.com/image-library/image/5044bfcfc97267166cd61ff5
https://www.dermquest.com/image-library/image/5044bfd0c97267166cd64278
https://www.dermquest.com/image-library/image/5044bfcfc97267166cd61ff6
https://www.dermquest.com/image-library/image/5044bfcfc97267166cd61ff7
https://www.dermquest.com/image-library/image/5044bfd0c97267166cd63c1b
https://www.dermquest.com/image-library/image/5044bfcfc97267166cd619b1
https://www.dermquest.com/image-library/image/5044bfcfc97267166cd619b4
https://www.dermquest.com/image-library/image/5044bfcfc97267166cd625a3
https://www.dermquest.com/image-library/image/5044bfd0c97267166cd64844
https://www.dermquest.com/image-library/image/5044bfcfc97267166cd619ba
https://www.dermquest.com/image-library/image/5044bfd0c97267166cd63ce3
https://www.dermquest.com/image-library/image/5044bfd0c97267166cd64437
https://www.dermquest.com/image-library/image/5044bfd1c97267166cd67203

и если я нажимаю открытую из тех страниц HTML с помощью текстового редактора, я могу найти информацию, в которой я нуждаюсь..

   *** some code here***
<figure>
         <a href="/imagelibrary/large/009514HB.JPG" target="_blank" class="preview-image"><img src="/imagelibrary/medium/009514HB.JPG" alt="acne keloidalis nuchae"/></a>
</figure>
...

Теперь я хотел бы получить эти числа из различных файлов HTML и затем добавить эти числа к https://www.dermquest.com/imagelibrary/large. Например, я хотел бы, чтобы мой финал txt файл имел URL, которые похожи на это, [немного NSFW] https://www.dermquest.com/imagelibrary/large/009514HB.JPG Эта строка была бы легче для меня к wget изображения! Я не знаю много о SED или AWK, таким образом, любой вид совета/справки был бы большим.

Спасибо!

tl; доктор: ссылки указывают на веб-страницу не на изображение, поэтому когда я wget, я загружаю страницы HTML, а не изображения, которые я хочу. Это - то, как я думаю, что мог сделать это, но любые лучшие решения будут полезны также!

1
задан 29 September 2018 в 04:54

2 ответа

В зависимости от сложности входных файлов я предлагаю не пытаться проанализировать HTML с awk, grep и такой, но использовать синтаксический анализатор HTML. Для подобных задач я использую рысь, браузер текстового режима. Устанавливать его простое sudo apt install lynx достаточно. Затем:

for file in *.html; do
    lynx -dump -listonly -nonumbers $file >> links.txt
done

Для Вашего демонстрационного отрывка это создает следующий вывод:

file:///imagelibrary/large/009514HB.JPG

При выполнении, file:// часть должна быть заменена надлежащим базовым URL:

sed -i 's|file://|https://www.dermquest.com|' links.txt

Результат:

https://www.dermquest.com/imagelibrary/large/009514HB.JPG
1
ответ дан 7 December 2019 в 15:13

Разламывание его на ступает, Вы хотите:

  1. Обработайте набор файлов (названный *.html?).
  2. Строки извлечения как <a href="/imagelibrary/large/009514HB.JPG" ....
  3. Извлеките часть имени файла ("009514HB.JPG").
  4. Произведите текст с помощью части имени файла.

    find . -type f -name '*.html' -print0 | \
        xargs -0 -r grep --no-filename "a href=" | \
        grep -E -o '[0-9A-Z]+\.JPG'
    

Затем путем обертывания вышеупомянутого внутри a for $() создайте, мы добираемся:

for i in $( find . -type f -name '*.html' -print0 | \
    xargs -0 -r grep --no-filename "a href=" | \
    grep -E -o '[0-9A-Z]+\.JPG'
          ) ; do
    echo "https://www.dermquest.com/imagelibrary/large/$i"
done

Конечно, читать man find, man xargs, man grep.

0
ответ дан 7 December 2019 в 15:13

Другие вопросы по тегам:

Похожие вопросы: