【问题标题】:Using awk sed or grep to parse URLs from webpage source使用 awk sed 或 grep 从网页源解析 URL
【发布时间】:2011-07-19 03:52:58
【问题描述】:

我正在尝试解析下载网页的来源以获取链接列表。单线就可以了。到目前为止,这是我尝试过的:

这似乎从某些页面名称中遗漏了部分 URL。

$ cat file.html | grep -o -E '\b(([\w-]+://?|domain[.]org)[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))'|sort -ut/ -k3

这会获取所有 URL,但我不想包含具有/是锚链接的链接。我也希望能够指定 domain.org/folder/:

$ awk 'BEGIN{
RS="</a>"
IGNORECASE=1
}
{
  for(o=1;o<=NF;o++){
    if ( $o ~ /href/){
      gsub(/.*href=\042/,"",$o)
      gsub(/\042.*/,"",$o)
      print $(o)
    }
  }
}' file.html

【问题讨论】:

标签: regex scripting sed awk grep


【解决方案1】:

如果你只解析 标签,你可以像这样匹配 href 属性:

$ cat file.html | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2 | sort | uniq

这将忽略锚点并保证您具有唯一性。这确实假设该页面具有格式良好的 (X)HTML,但您可以先通过 Tidy。

【讨论】:

  • 这与我发布的第二个示例类似,但我正在寻找一种方法来修剪作为锚链接的结果。 domain.com/folder/link.htmldomain.com/folder/link.html#anchor不可取
  • 很好,但现在似乎包含了其他链接(也许我之前没有注意到它们。grep 语句也可以指定 domain.com/folder/ 吗?谢谢
  • @Astron,一定要加 ` | grep 'domain.cold/folder/'` 在行尾。
【解决方案2】:
lynx -dump http://www.ibm.com

然后在输出中查找字符串“References”。如果需要,使用sed 进行后期处理。

使用不同的工具有时会使工作变得更简单。偶尔,一种不同的工具会使工作变得简单。这是其中之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-08
    • 2012-04-16
    • 2011-12-27
    • 2012-08-02
    • 2022-11-30
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多