如何使用不带html的wget获取页面文本?


17

如果我尝试在网页上使用wget,则表示该页面为html。是否可以仅检索文件文本而不关联html?(这对我来说是必需的,因为某些HTML页面包含带有html标签的c程序正在下载。我必须在浏览器中将其打开,然后手动复制文本以创建.c文件。)


1
确实可以,但是您需要编写一些函数来解析页面中的代码并将其另存为.c。这并不难,但是取决于页面结构。如果您提供链接,则可能有人会为您提供准确的代码。不然sed还是perl你的朋友。
2012年

Answers:


26

wget将仅检索文档。如果文档是HTML格式,则需要的是解析文档的结果。

例如,lynx -dump -nolist如果周围有山猫,则可以使用。

lynx是一款轻巧,简单的Web浏览器,具有-dump用于输出解析过程结果的功能。-nolist避免在最后出现链接列表,如果页面有任何超链接,该列表就会出现。

正如@Thor所提到的,elinks也可以用于此操作,因为它也有一个-dump选项(并且必须-no-references省略链接列表)。如果您使用-sigh-框架(MTFBWY)跨过某些站点,它可能特别有用。

另外,请记住,除非页面真的只是带有HTML标记的C代码,否则您将需要检查结果,以确保那里没有C代码。


5

如果您没有安装这些其他工具,仅安装了wget,并且页面没有仅格式化纯文本和链接(例如源代码或文件列表),则可以使用sed剥离HTML,如下所示:

wget -qO- http://address/of/page/you/want/to/view/ | sed -e 's/<[^>]*>//g'

这使用wget将页面的源转储到STDOUT并进行sed剥离任何<>对以及它们之间的任何东西。

然后,您可以使用>将sed命令的输出重定向到要创建的文件:

wget -qO- http://.../ | sed -e 's/<[^>]*>//g' > downloaded_file.txt

注意:您可能会发现文件中不需要的多余空格(例如,行缩进了几列)

使用文本编辑器整理文件(或下载C源代码时的源格式化程序)可能最简单。

如果您需要对文件的每一行执行相同的简单操作,则可以在sed命令中包括执行此操作的命令(此处删除一个前导空格):

wget -qO- http://.../ | sed -e 's/<[^>]*>//g;s/^ //g' > downloaded_stripped_file.txt

3

只是添加另一个工具。我更喜欢w3m,它是一个lynx类似控制台的浏览器。您可能想查看系统上已有的功能。

w3m -dump website.html
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.