Массовый запрос веб-сайтов с использованием текстовых браузеров
Я хочу, чтобы текстовый браузер, такой как 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