作为 w3m 的新用户,我正在尝试做一些基本的事情,例如:
w3m -dump_source nytimes.com > nytimes.html
Run Code Online (Sandbox Code Playgroud)
产生的输出给出了疯狂的字符和符号。但是,当我使用 浏览时w3m nytimes,它会正确加载,我什至可以使用v.
进一步当我尝试:
w3m -dump_extra nytimes.com > nytimes.html
Run Code Online (Sandbox Code Playgroud)
除了 HTML 源代码之外,我完美地获得了与该站点相关的所有额外信息。
任何帮助,将不胜感激。
默认情况下,w3m通过发送以下 HTTP 标头从服务器请求压缩输出:
Accept-Encoding: gzip, compress, bzip, bzip2, deflate
Run Code Online (Sandbox Code Playgroud)
标头的值可能因w3m的版本而异,但事实是最新版本的程序使用标头请求从主机压缩输出Accept-Encoding。您可以使用以下命令找出确切的标题:
w3m -dump_source -reqlog nytimes.com > /dev/null
Run Code Online (Sandbox Code Playgroud)
请求和响应头将被记录到~/.w3m/request.log文件中。
您可以通过如下覆盖标头来请求未压缩版本:
w3m -dump_source nytimes.com -o accept_encoding='identity;q=0'
Run Code Online (Sandbox Code Playgroud)
甚至
w3m -dump_source nytimes.com -o accept_encoding='*;q=0'
Run Code Online (Sandbox Code Playgroud)
或者,通过管道解压缩输出:
w3m -dump_source nytimes.com | gunzip -f
Run Code Online (Sandbox Code Playgroud)
如果输入数据不是gunzip识别的格式,该-f选项会导致gunzip将输入数据复制到标准输出而不更改。根据文档,您还应该传递选项,但即使没有此选项,管道命令也应将结果打印到标准输出。--stdout
请注意,服务器可能会响应以 .zip 格式压缩的内容bzip2。在这种情况下,您可以通过bunzip2 -f命令管道输出。