最近在网上搜歌词的时候碰到一些小鬼子的网站禁止复制禁止选择,这让我非常不爽。
好吧,如果你跟我说版权保护,请用japanese来吧。
举个例子http://www.kasi-time.com/这个网站,查动漫歌曲的时候这个网站还是相当全的,就是不能复制和选择
现在我们用chrome来看看他怎么封我们的,让大牛见笑了
以死宅标志歌曲only my railgun来说
在正常状态这个网站是屏蔽了ctrl A跟选择的
用chrome developer tool查看event
发现他在document,body,#center,上都加了listener
分别是document全域的onclick和onkeydown,body域上的oncontextmenu和onselectstart,#center域上的onmousedown
真是够无聊的,加怎么多
顺便说明一下,onclick处理鼠标点击事件,onkeydown处理键盘事件,oncontextmenu是右击事件,onselectstart处理鼠标选择文字事件,onmousedown处理左键按下
这个网站的数据是JS回调php,然后php再document.write出来的,所以单禁用JS是没有任何帮助的
现在我们来看看他的listener的实现
首先是ctrl A的全选,嗯,coder还好心标出来了,我知道你把Ctrl+A给ban了,谢谢
body域上的两个listener更加绝,直接return false;
center 域上的也是个return false;
看来还挺努力的啊,我们应该怎么办呢,直接给他全设成null
然后试试
嗯?其他地方都能选择了,为什么唯独中间我们要的部分不行呢?
歌词不能复制,我要旁边那些广告干嘛
我们继续查看这个div的属性
原来如此,你在CSS加了这个啊
果断设成auto,直接把前面勾取消也行
再试试
可以了,毫无压力。
换成firefox的时候,属性不同的原因,比如onselectstart叫做onselect,而且coder没写好firefox的所有函数,所以只要禁用body的oncontextmenu和#center的onmousedown就可复制
除了这个网站之外还有很多很多的网站想通过禁止select和ctrlA来防止我们复制他的数据,可是coder啊,你都把数据传到我本地来了,就像你都把妹子放到狼窝里了,还指望着能保住么,好吧,对于一般网民还是可能保得住的
总之他都传到本地来了,就算从html code里抠出来也是可以的,巧用文本编辑器和正则表达式可以轻松搞定
还有些网站为了不让人不复制,用spam code来加入垃圾,同样用正则表达式+文本编辑器可以轻松去除
最后说一下使用网络爬虫爬这些网站歌词的办法:
这里我用了httpfox,任何抓包或者chrome分析都可以
找到他存放歌词的文件地址,够简单,query string里的就是no是标示吧,而且这个标示就是网址上的no
好吧,那我们就不客气了,直接写个脚本发给这个网址
而且网址不验证客户端类型,省了我几行代码,不错
随手用python写了个脚本,顺利保存了歌词
如果需要保存名字和批量下载,写个htmlparser处理即可
import urllib
def main():
response=urllib.urlopen('http://www.kasi-time.com/item_js.php?no='+'45162')
text=response.read().replace('document.write(\'','').replace('<br>','\n').replace(' ',' ').replace('\');','')
file=open('1.txt','w')
file.write(text)
file.close()
if __name__=='__main__':
main()
以上均为无聊所做,大牛勿见笑