1

Учитывая несколько сотен упорядоченных по порядку html-файлов, каждый из которых имеет несколько тегов изображений, но только одно изображение с идентификатором, который я ищу и следую условию

<img title="$titleText" src="$imgURL" id="foo" border="0" />

где $imgURL и $titleText уникальны для каждой страницы и непредсказуемы, так как URL страницы (предсказуемо), а изображение, которое я хочу на каждой странице, имеет id="foo" (то же самое на каждой странице, другие изображения имеют разные или без идентификатора).

Как бы я пошел извлекать $imgURL и $titleText в bash?

Пока я смотрю на отправную точку

for count in `seq 1 400`; 
   do page="https://website/$count.html"; 
   imgURL=[somehow get $imgURL from $page];
   titleText=[somehow get $titleText from $page];
   echo -e "$count\n$titleText\n$imgURL\n\n" >> some-file; 
done

но без реальной идеи о том, как выполнить части в скобках.
Вероятно, потребуется задействовать как минимум два из sed/grep/curl/wget .

Изменить: 95% ответили JoW ниже, последние детали пары следуйте здесь

После того, как JoW указал мне правильное направление, я смог легко разобраться в остальном. Последний использованный скрипт, который имел тот же намеченный эффект, что и вышеперечисленный код "отправной точки", был:

#!/usr/bin/python
#
from bs4 import BeautifulSoup
import requests
for count in xrange(1, 400):
    ct = str(count)
    url = "website/" + ct + ".html"
    data = requests.get("https://" +url)
    soup = BeautifulSoup(data.text)
    for link in soup.findAll("img", {"id": "foo"}):
        with open('some-file', "a") as out:
            out.write(ct + "\n" + link['title'] + "\n" + link['src'] + "\n\n")

1 ответ1

0

Недавно мне пришлось работать с подобной проблемой, и после бесчисленных часов разочарования я закончил тем, что использовал python с BeautifulSoup4, который я должен был использовать с самого начала - и вы тоже должны, по моему мнению. Гораздо проще работать с ним, так как он действительно создан для этого типа упражнений (например, синтаксический анализ HTML). Вы можете легко написать скрипт Python, используя BS4, собирая все URL-адреса изображений в файле, а затем вызывать этот скрипт из bash.

Это то, что я бы сделал.

Редактировать:

Вот краткий пример того, как это может выглядеть:

#!/bin/python

from bs4 import BeautifulSoup

soup = BeautifulSoup(open("index.html")) 

for link in soup.findAll("img", {"id": "foo"})
  print(link['src'])

Очевидно, что это проверяет только один файл (index.html) и печатает ссылку на stoud. Для вашей цели вы должны либо написать все это на языке Python (т.е. просмотреть все файлы здесь), либо передать имена файлов из bash в ваш скрипт на Python. В любом случае вы, вероятно, захотите написать URL в выходной файл.

with open('output.txt', 'a') as out:
 out.write(link['src'])

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .