Сохранение нескольких URL-адресов в текстовые файлы

У меня есть список URL-адресов, и я хочу сохранить каждую из своих целей в отдельном текстовом файле.

Ниже приведен пример входного файла, содержащего URL-адреса:

~$: head -3 url.txt http://www.uniprot.org/uniprot/P32234.txt http://www.uniprot.org/uniprot/P05552.txt http://www.uniprot.org/uniprot/P07701.txt 

В настоящее время я использую пользовательскую функцию Python для выполнения этой задачи. Он работает, но основными неудобными являются: пользователь должен вручную копировать URL-адреса (нет прямого ввода файлов), а вывод содержит некоторые символы «b» в начале каждой строки (? Binary).

 ~$: head -3 P32234.txt b' ID 128UP_DROME Reviewed; 368 AA. 'b' AC P32234; Q9V648; 'b' DT 01-OCT-1993, integrated into UniProtKB/Swiss-Prot. 

Вот код Python:

 def html_to_txt(): import urllib.request url = str(input('Enter URL: ')) page = urllib.request.urlopen(url) with open(str(input('Enter filename: ')), "w") as f: for x in page: f.write(str(x).replace('\\n','\n')) s= 'Done' return s 

Есть ли более чистый способ сделать это, используя некоторые утилиты Unix?

6 Solutions collect form web for “Сохранение нескольких URL-адресов в текстовые файлы”

Используйте опцию -i :

 wget -i ./url.txt 

От man wget :

-i-файл

–input-файл = файл

Чтение URL-адресов из локального или внешнего файла. Если – указано как файл, URL-адреса считываются со стандартного ввода. (Используйте ./- для чтения из файла, буквально названного -.) Если эта функция используется, в командной строке не должно быть URL-адресов. Если в командной строке и во входном файле есть URL-адреса, то первые из них будут извлекаться. Если -force-html не указан, файл должен состоять из серии URL-адресов, по одному на строку.

Однако, если вы укажете –force-html, документ будет рассматриваться как html. В этом случае у вас могут возникнуть проблемы с относительными ссылками, которые вы можете решить либо путем добавления «» к документам, либо путем указания –base = url в командной строке.

Если файл является внешним, документ будет автоматически обрабатываться как html, если Content-Type соответствует text / html. Кроме того, местоположение файла будет неявно использоваться в качестве базового href, если не указано ни одного.

wget есть возможность сделать именно это:

 wget --input-file url.txt 

будет считывать по одному URL-адресу из строки url.txt и загружать их в текущий каталог последовательно.

В более общем плане вы можете использовать xargs для такого рода вещей в сочетании с wget или curl :

 xargs wget < url.txt xargs curl -O < url.txt 

xargs считывает каждую строку своего ввода и предоставляет в качестве аргумента команду, которую вы ему даете. Здесь эта команда wget или curl -O , оба из которых загружают URL-адрес и сохраняют его в текущем каталоге. < url.txt предоставляет содержимое url.txt в качестве ввода команды xargs .


Проблема с вашим кодом Python заключается в том, что вы получаете из urllib данные в байте , которые затем печатаются непосредственно в файл, который b'abc\00\0a...' байты в b'abc\00\0a...' (вот как вы пишете байтовые литералы).

с w3m :

 echo 'http://unix.stackexchange.com/questions/148670/save-html-to-text-file' | tee - - - | xargs -n1 w3m -dump | sed '/Save html/!d;N;N;N;N;N;N;N' 

Мне кажется, что xargs не нужно даже быть необходимым – наверняка есть настройка для нескольких URL-адресов одновременно, но я не могу это проверить в данный момент. В любом случае, xargs работает:

 Save html to text file I'd like to save some (plain HTML) web pages to text file, from URL stored in text files as well. Here's an exemple of the input file containing the URLs: ~$: head -3 url.txt Save html to text file I'd like to save some (plain HTML) web pages to text file, from URL stored in text files as well. Here's an exemple of the input file containing the URLs: ~$: head -3 url.txt Save html to text file I'd like to save some (plain HTML) web pages to text file, from URL stored in text files as well. Here's an exemple of the input file containing the URLs: ~$: head -3 url.txt Save html to text file I'd like to save some (plain HTML) web pages to text file, from URL stored in text files as well. Here's an exemple of the input file containing the URLs: ~$: head -3 url.txt 

Я бы сделал это в оболочке с помощью wget.

 while read y; do wget "$y" done < url.txt 

Есть еще два метода:

 wget $(<file) 

а также

 while read -r link; do wget "$link"; done < file 

Лично я бы просто сохранил переменные UniProt в файле:

 $ cat names P32234 P05552 P07701 

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

 while read prot; do wget http://www.uniprot.org/uniprot/"$prot".txt -O "$prot".flat done < names 

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

 $ while read prot; do printf "%s\t" "$prot" wget http://www.uniprot.org/uniprot/"$prot".txt -O - | awk '$1=="ID"{print $2}'; done 2>/dev/null < names P32234 128UP_DROME P05552 ADF1_DROME P07701 SGS5_DROME 
  • Как сделать WGET образ из веб-адреса и сохранить его на удаленном ftp-месте в виде cronjob on dd-wrt
  • запустить две команды в отключенном экране
  • Как использовать параметр wget -wait при использовании ввода из файла?
  • linux curl POST запрос не работает
  • Как загрузить openSUSE 12.1 через `wget -c`?
  • Почему я продолжаю получать файл wget-log в ~ на Arch Linux?
  • Загрузка с динамически изменяющихся URL-адресов через скрипт
  • Печать как Firefox
  • Как загрузить все изображения из темы форума с помощью wget
  • Будет ли wget -k по-прежнему преобразовывать ссылки в относительные пути, если wget остановлен преждевременно?
  • Альтернативы wget
  • Linux и Unix - лучшая ОС в мире.