所在的位置: html >> html市场 >> 在Bash中解析HTML

在Bash中解析HTML

我有一个过程,我需要从网页中复制所有图像。我曾经使用运行此过程xmllint,它将处理XML或HTML文件并打印出您指定的条目。但是当我的服务器主机提供商升级他们的系统时,他们没有包含.所以我必须找到另一种方法来从HTML页面中提取图像列表。事实证明,您可以在Bash中执行此操作。

阅读声明

您可能认为Bash无法解析数据文件,但经过一些巧妙的思考,它可以。Bash与之前的其他UNIXshell一样,可以通过内置read语句从文件中一次解析一行。

默认情况下,该语句扫描一行数据并将其拆分为字段。通常,使用空格和制表符拆分字段,每行结束换行,但您可以通过设置内部字段分隔符(IFS)值和行尾分隔符(-d)来更改此行为。

要使用解析HTML文件,请将设置为大于号()并将分隔符设置为小于号()。每次Bash扫描一行时,它都会解析到下一行(HTML标记的开头),然后在每一行(HTML标记的结尾)拆分该数据。此示例代码采用一行输入并将数据拆分为TAG和VALUE变量:

本地IFS="read-d"标签值

让我们探索一下这是如何工作的。考虑这个简单的HTML文件:

imgsrc="logo.png"alt="我的标志"/p一些文字/p

第一次解析这个文件时,它在第一个符号处停止。由于是此示例输入的第一个字符,这意味着Bash找到了一个空字符串。结果和字符串也是空的。但这对我的用例来说很好。

下次Bash读取输入时,它会imgsrc="logo.png"alt="Mylogo"/在alt之前添加一个换行符,并在下一行的符号之前停止。然后分裂的线路符号,它的叶子与imgsrc="logo.png"alt="Mylogo"/和一个空换行符。

第三次解析HTML文件,它得到psometext.击分裂在字符串导致含有p和与sometext。

一个简单的解析器

现在您了解了如何使用,使用Bash解析更长的HTML文件就很容易了。从调用的Bash函数开始,xmlgetnext使用解析数据,因为您将在脚本中一次又一次地执行此操作。我命名我的函数是为了提醒我这是Linux程序的替代品,但我可以很容易地将它命名为htmlgetnext。

xmlgetnext(){本地IFS="read-d"标签值}

现在调用该函数来解析HTML文件。这是我的完整htmltags脚本:

#!/bin/sh#打印所有html标签的列表xmlgetnext(){本地IFS="read-d"标签值}猫$1

而xmlgetnext;做echo$TAG;完毕

最后一行是关键。它循环使用文件来解析HTML,并仅打印出条目。并且由于echo标准字段分隔符的操作方式,任何包含换行符的行都会打印在一行上,如imgsrc="logo.png"alt="Mylogo"/.

为了仅获取图像列表,我运行此脚本的输出grep以仅打印img在行首具有标记的行。




转载请注明:http://www.aierlanlan.com/rzdk/4154.html

  • 上一篇文章:
  •   
  • 下一篇文章: