我有一个 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”字符(?二进制)。
~$: 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 实用程序来做到这一点?
答案1
使用-i
选项:
wget -i ./url.txt
从man wget
:
-i 文件
--输入文件=文件
从本地或外部文件读取 URL。如果 - 指定为文件,则从标准输入读取 URL。 (使用 ./- 从字面名称为 - 的文件中读取。)如果使用此函数,则命令行上不需要出现 URL。如果命令行和输入文件中都有 URL,则命令行中的 URL 将首先被检索。如果未指定 --force-html,则文件应包含一系列 URL,每行一个。
但是,如果指定--force-html,则文档将被视为html。在这种情况下,您可能会遇到相对链接的问题,您可以通过在文档中添加“”或在命令行上指定 --base=url 来解决该问题。
如果文件是外部文件,则当 Content-Type 与 text/html 匹配时,该文档将自动被视为 html。此外,如果未指定,文件的位置将隐式用作基本 href。
答案2
wget
有一个选项可以做到这一点:
wget --input-file url.txt
将会每行读取一个 URLurl.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...'
(这就是编写字节文字的方式)。
答案3
和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
甚至没有必要——当然有一个可以同时设置多个网址的设置,但我现在还无法理解它。无论如何,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
答案4
还有另外两种方法:
wget $(<file)
和
while read -r link; do wget "$link"; done < file