提取 div 元素的完整链接

提取 div 元素的完整链接

我正在下载一个系列的剧集,但我厌倦了加入该网站、复制链接并下载每一集。

首先,我加入网站并获取 HTML 代码。代码很长,但我对此特别感兴趣(这是链接所在的地方)

    var e=Array(),d=1;e[1]='<div style="margin-left:7px"><object width="720" height="450" class="BLOG_video_class" id="BLOG_video-ee57f234e359092e" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="movie" value="//www.youtube.com/get_player"><param name="bgcolor" value="#FFFFFF"><param name="allowfullscreen" value="true"><param name="flashvars" value="flvurl=http://redirector.googlevideo.com/videoplayback?id%3Da87eff0521883521%26itag%3D5%26source%3Dblogger%26app%3Dblogger%26cmo%3Dsensitive_content%253Dyes%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1400695090%26sparams%3Did,itag,source,ip,ipbits,expire%26signature%3DAA6B72C5D9C12D461C7A0E3F59B2C208A7CDC82D.AE374E37E58A41191B10F30AA43BE42379DA6D5B%26key%3Dck2&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Da87eff0521883521%26offsetms%3D5000%26itag%3Dw160%26sigh%3DaUKIa9j5GROOBShBybzlFhMGllc&amp;autoplay=0"><embed src="//www.youtube.com/get_player" type="application/x-shockwave-flash"width="720" height="450" bgcolor="#FFFFFF"flashvars="flvurl=http://redirector.googlevideo.com/videoplayback?id%3Da87eff0521883521%26itag%3D5%26source%3Dblogger%26app%3Dblogger%26cmo%3Dsensitive_content%253Dyes%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1400695090%26sparams%3Did,itag,source,ip,ipbits,expire%26signature%3DAA6B72C5D9C12D461C7A0E3F59B2C208A7CDC82D.AE374E37E58A41191B10F30AA43BE42379DA6D5B%26key%3Dck2&iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Da87eff0521883521%26offsetms%3D5000%26itag%3Dw160%26sigh%3DaUKIa9j5GROOBShBybzlFhMGllc&autoplay=0"allowFullScreen="true" /></object></div>';e[2]='<div style="margin-left:7px"><iframe src="http://videosasd.com/play-zs-www30.zippyshare.com/v/94301695/file.html" width="720" height="450" scrolling="no" frameborder="0"></iframe></div>';

好吧,这是一个很长的代码,但我有兴趣得到它。(有两个相同的链接,都可以在末尾不带“&”的情况下工作)

    http://redirector.googlevideo.com/videoplayback?id%3Da87eff0521883521%26itag%3D5%26source%3Dblogger%26app%3Dblogger%26cmo%3Dsensitive_content%253Dyes%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1400695090%26sparams%3Did,itag,source,ip,ipbits,expire%26signature%3DAA6B72C5D9C12D461C7A0E3F59B2C208A7CDC82D.AE374E37E58A41191B10F30AA43BE42379DA6D5B%26key%3Dck2&amp

现在,我正在使用这个正则表达式(注意,我对此很陌生,我测试过它并且可以工作)

\s*flvurl\s*=\s*(\"([^"]*\")|'[^']*'|([^'">\s]+));*%26key%3Dck2&amp

在终端中我使用

wget -q -O - "serverlink" | sed -e "s/\s*flvurl\s*=\s*(\"([^"]*\")|'[^']*'|([^'">\s]+));*%26key%3Dck2&amp//g"

我收到错误unexpected token)''

有人知道我该如何修复它吗?(或者,也许有人知道一个更好的正则表达式来从第一个代码框获取链接)

答案1

这里有一些更简单的方法来获得你想要的东西:

  1. grepPCRE 函数

    wget -q -O - "serverlink" | grep -oP 'flvurl=\K[^;]+(?=&amp;)' 
    

    解释

    在 PCRE 中,\K平均值“丢弃到这里为止的所有匹配项”.-o选择grep意味着“仅打印字符串的匹配部分”。因此,grep -oP 'flvurl=\K意味着:“寻找flvurl=并开始匹配它。”办法[^;]+“匹配;尽可能多的非字符

    foo(?=bar)格式称为积极展望。它不是实际匹配字符串的一部分。它的意思是 _“匹配foo后跟bar但丢弃bar。将所有这些放在一起,上面的正则表达式将打印flvurl=和之间的所有内容&amp;

  2. sed

    wget -q -O - "serverlink" | sed -nr 's/.*flvurl=([^;]+)&amp;.*/\1/p' 
    

    解释

    替换运算符(我使用传统的,s///而不是s\\\您使用的,但想法相同)将用 和 之间的文本替换所有内容flvurl=&amp;括号用于“捕获”匹配的字符串,使其可用作\1。该-r选项启用扩展正则表达式它可以处理括号而不需要转义 (\(\))。顺便说一句,这就是您收到错误的原因。

    禁止正常输出-n,默认情况下不会打印任何行。p替换末尾的 ( s///p) 表示“如果替换成功则打印当前行”

  3. Perl

    使用与上述相同的逻辑sed

    wget -q -O - "serverlink" | perl -ne 's/.*flvurl=([^;]+)&amp;.*/$1/ && print' 
    

答案2

您的命令行正在将 wget 的输出导入 sed - 以便替换结果sed 命令的 URL争论在 wget 命令行上,你需要执行类似以下操作

wget -q -O- -- $(echo -n "urlstring" | sed -e 's/pattern/replacement/')

或者

wget -q -O- -- $(sed -e 's/pattern/replacement/' <<< "urlstring")

在此上下文中可以-e省略。

相关内容