获取包含外部 html 的链接

获取包含外部 html 的链接

从包含大量链接的 html 页面中,我正在寻找一种方法来仅提取遵循特定格式的链接。

<a href="https://always/same/link/same-name_19.html">always same text</a>
<a href="https://always/same/link/same-name_18.html">always same text</a>
<a href="https://always/same/link/same-name_17.html">always same text</a>

我找到了许多使用grepsed和其他解决方案,但它们都只返回内部链接,没有 html 标签和“始终相同的文本”部分。

它应该可以从命令行/bash 脚本运行,我使用的是 Debian Jessie。解决方案不一定是单行的。

更新

我在 Ryan's Answer 的帮助下制作的脚本。

Curl=https://always/same/link/
filename=same-name

page=`curl "$Curl$filename"`
echo $page > $filename.curl

Gurl=https://always/same/link/

# working
link=`grep -Eo '<a href="https://always/same/link/same-name_([0-9]+)\.html">always same text</a>' $filename.curl | sort | tail -n1` 

# not working; $link will be empty
link=`grep -Eo "<a href=\"https://always/same/link/same-name_([0-9]+)\.html\">always same text</a>" $filename.curl | sort | tail -n1` 

# not working; $link will be empty
link=`grep -Eo "<a href=\"${Gurl}${filename}_([0-9]+)\.html\">always same text</a>" $filename.curl | sort | tail -n1` 

# what i ended up using.
link=`grep -Eo '<a href="'${Gurl}${filename}'_([0-9]+)\.html\">always same text</a>' $filename.curl | sort | tail -n1` 
echo $link | grep -o 'https:.*[.]html'

答案1

假设大多数 href 属性始终相同,并且内部文本始终相同,并且您有一个 HTML 源文件,那么类似这样的操作应该有效:

grep -Eo '<a href="https://always/same/link/same-name_([0-9]+)\.html">always same text</a>' HTML-source-file

grep将搜索HTML-source-file给定的模式https://always/same/link/same-name_([0-9]+)\.html。此模式将匹配由以下元素组成的任何字符串(按顺序):

  1. https://always/same/link/same-name_
  2. 0 到 9 中的任意数字
  3. .html

-E标志告诉grep将模式解释为扩展的正则表达式。

-o标志告诉grep只输出与模式匹配的文本。

要使用变量,可以在正则表达式两边使用双引号,转义双引号里面带反斜杠的正则表达式,并将变量名称括在花括号中,如下所示:

$ link_path=https://always/same/link/
$ link_name=same-name
$ grep -Eo "<a href=\"${link_path}${link_name}_([0-9]+)\.html\">always same text</a>" HTML-source-file

如果由于某种原因,上面的grep转义双引号不起作用,您也可以使用:

$ link_path=https://always/same/link/
$ link_name=same-name
$ grep -Eo '<a href="'${link_path}${link_name}'_([0-9]+)\.html">always same text</a>' HTML-source-file

相关内容