【问题标题】:Scraping specific hyperlinks from a website using bash使用 bash 从网站上抓取特定的超链接
【发布时间】:2020-02-09 18:40:58
【问题描述】:

我有一个包含几十个超链接的网站,格式如下:

<a href=/news/detail/1/hyperlink>textvalue</a>

我想获取所有超链接及其文本值,其中超链接以/news/detail/1/ 开头。

输出应采用以下格式:

textvalue
/news/detail/1/hyperlink

【问题讨论】:

  • 你的问题的标题没有多大意义。这就像问“使用划艇我应该戴什么太阳镜?”显然,无论你如何削减它(我会非常认真地接受 Maroun 的建议),你将使用其他程序。无论您是从 bash 或 csh 或 zsh 还是其他任何可能存在的 shell 运行该程序 - 这既不在这里也不在那里。

标签: bash


【解决方案1】:

首先,人们会来到这里(可能是在谈论一个叫 Cthuhlu 的人)并告诉你 awk/regex 不是 HTML 解析器。他们是对的,你应该考虑一下他们所说的话。实际上,您通常可以通过以下方式侥幸逃脱:

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

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

这也假设文件被格式化为&lt;a href=/news/detail/1/hyperlink&gt;textvalue&lt;/a&gt; 的每个实例都在单独的行上。如果需要,可以轻松修改正则表达式以适应不同的格式。

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

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

【讨论】:

猜你喜欢
  • 2020-06-30
  • 2021-03-31
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 2016-05-20
  • 2018-01-09
  • 2021-09-27
  • 2021-04-28
相关资源
最近更新 更多