使用bash从网站上抓取特定的超链接

时间:2019-10-12 13:41:22

标签: bash

我有一个网站,其中包含数十种以下格式的超链接:

cout<<(a + b);

我想获取所有超链接及其文本值,其中超链接以<a href=/news/detail/1/hyperlink>textvalue</a> 开头。

输出应采用以下格式:

/news/detail/1/

1 个答案:

答案 0 :(得分:0)

首先,人们会走进这里(可能是在谈论一个叫Cthuhlu的人),并告诉您awk / regex不是HTML解析器。他们是对的,您应该考虑一下他们所说的话。实际上,您经常可以逃脱这样的事情:

sed -n 's/^.*<a\s\+href\=\([^>]\+\)>\([^<]\+\)<\/a>.*$/\2\n\1/p' input_file.html

这告诉sed读取文件input_file.html,找到与正则表达式匹配的行,将其替换为您为输出指定的部分,然后丢弃其他所有内容。结果将打印到终端。

这还假设文件的格式设置为使得<a href=/news/detail/1/hyperlink>textvalue</a>的每个实例都位于单独的行上。如果需要,可以轻松修改正则表达式以适应不同的格式。

如果您想要的所有链接都以/news/detail/1/开头,则可能会起作用:

sed -n 's/^.*<a\s\+href\=\(\/news\/detail\/1\/[^>]\+\)>\([^<]\+\)<\/a>.*$/\2\n\1/p' input_file.html