Массовый запрос веб-сайтов с использованием текстовых браузеров

Я хочу, чтобы текстовый браузер, такой как lynx,w3m или ссылки, выполнял массовый запрос из списка доступных ссылок. Результаты будут отфильтрованы по ключевому слову и должны быть добавлены в исходный список. Например, пусть список будет в list.txt:

"http://dict.cc//?s=Chemical"
"http://dict.cc//?s=Fenster"

Я могу извлечь результат, если отправлю только одну ссылку за раз, например

head -n 1 list.txt | xargs links -dump | sed -n '/NOUN/p'
tail -n 1 list.txt | xargs links -dump | sed -n '/NOUN/p'

работает как положено, но не:

cat list.txt | xargs links -dump | sed -n '/NOUN/p'

или же

for line in `cat list.txt`; do links -dump $line ; done

Что я делаю неправильно? Следующим шагом вывод должен быть добавлен в список в правильной строке, чтобы после операции list.txt выглядел следующим образом:

"http://dict.cc//?s=Chemical" edit  NOUN   a chemical | chemicals       -
"http://dict.cc//?s=Fenster" NOUN   das Fenster | die Fenster    edit

Должно быть возможно путем комбинации или использования с другими инструментами, такими как вставка и т. Д. Это не работает, как описано выше, что было бы лучшим решением?:

for line in `cat list.txt`; do echo -n $line && links -dump $line; done

Пример только для демонстрации, я буду использовать другие сайты, кроме dict.cc. К сожалению, API/REST недоступны.

2 ответа

Решение

Я вертел команды, пока не нашел ошибку. Проблема заключается в двойных кавычках URL, указанных в list.txt. После удаления это работает нормально:

for line in `cat engl.txt`; do 
  echo -n $line && links -dump $line| sed -n '/NOUN/p' 
done

Если нужно (нужно) сохранить двойные кавычки, то использование записей в приведенном выше файле в качестве команды для ссылок, переданных xargs, работает (но не для команды чуть выше):

for line in `cat list.txt`; do 
  echo -n $line && echo $line | xargs links -dump | sed -n '/NOUN/p'
done

xargs передаст в программу более одного аргумента одновременно, если вы не ограничите количество аргументов: xargs -n1 links -dump, Может быть, ссылки принимает только один аргумент. Если вам нужен только точный файл в URL, а не любые другие связанные документы, вы также можете использовать curl,

for line in cat list.txt расщепляется в любом пустом месте. Так что не будет работать, если какая-либо строка в list.txt содержит пробелы.

Попробуйте это перебрать список:

cat 'list.txt' | while IFS= read -r line; do
  echo -n $line && links -dump $line
done
Другие вопросы по тегам