百度Mp3的Url老是改来改去,去年用Ruby/Hpricot写的一个抓取歌名及链接的小脚本自然是无法运行了。
看了一下Page Source,XPath倒没怎么变动,URL却换成了Javascript变换加密。
<html>
............
<table class="t" width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><a class="l" title="根据用户指令,百度的搜索引擎系统会以非人工方式自动生成到第三方网页的链接。“百度”自身不存储、控制、编辑或修改被链接的第三方网页的信息。百度高度重视知识产权保护,并制定了旨在保护权利人的合法权益的措施和步骤,当权利人发现在百度生成的链接所指向的第三方网页内容侵犯其著作权时,请权利人向百度发出“权利通知”,百度将依法采取措施断开相关链接。">百度提示,请您阅读</a></td>
<td align="right"><a href="http://www.baidu.com/search/appcopyright.html" target="_blank" class="l">权利声明</a></td>
</tr>
</table>
<div style="text-align:center"><div id="adv"></div></div>
</div>
</BODY>
<script>
function G(A){return document.getElementById(A)}function sa(){var C=G("adv");if(C.innerHTML){var B=520,A=530;var E=(screen.width-B)/2,D=(screen.height-A)/2;moveTo(E,D);resizeTo(B,A)}}var song_1220027223;function sd(B){var A=new Image();A.src="/wd/sg-url.jpg?url="+song_1220027223+"&pos="+B+"&r="+Math.random()}function disUrl(){var F=1220027223,L=0;var I="6IIE://00H.MJzCB7GH.C3I/tEe7A3/tEZIIz16B3CI/RPPX-X/RPPXXQYRRQYQU.BES",J="6IIE://00H.MJzCB7GH.C3I/tEe7A3/tEZIIz16B3CI/RPPX-X/RPPXXQYRRQYQU.BES";var O="",E="";var K=[],H=[];var B=G("urln"),C=G("urla");function N(S,P,Q){for(var R=S;R<=P;R++){K[R]=R+Q;H[R+Q]=R}}N(0,9,48);N(10,35,55);N(36,61,61);var M=F%26;M=M?M:1;function A(Q){var P=Q.length;var S="";for(var R=0;R<P;R++){var T=Q.charAt(R);if(/[A-Za-z0-9]/.test(T)){var U=H[Q.charCodeAt(R)]-M;if(U<0){U+=62}T=String.fromCharCode(K[U])}S+=T}return S}O=A(I);E=(I==J)?O:A(J);B.href=C.href=song_1220027223=O;C.innerHTML=E;if(!L||F-L<3600){var D=new Image();D.src="/wd/mp3-sg-decode.jpg?url="+O+"&r="+Math.random()}}disUrl();
</script>
</HTML>
仔细瞧瞧还是可以发现了某些对应关系。
心想何不反其道而行之,来个逆向变换呢?正好可以练练手。xixi
def _mktab(x)
t0 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
p = t0.partition(x)
p[1] + p[2] + p[0]
end
def decode(s)
s.tr(_mktab(s[0].chr), s=~ /....:\// ? _mktab('h') : _mktab('f')) #http|ftp
end
puts decode(ARGV[0] || "v773://AAA.xz6w1o.q20//tzo6v/px_GEEM_G.03H") if __FILE__ == $0
But,...百度的页面好像是打不开了,晕...