- 论坛徽章:
- 0
|
今天,群里一位童鞋碰到的一个问题,本着互帮互助的无私精神,帮他研究了下,现总结如下:
Q: 采集网站资源,但网站采用的防盗链,不能直接访问下载页 如何解决?
A: 一般的防盗链采用的是识别访问者的Referer 来判断访问者是否直接通过站外链接下载的资源。所以,在下载时伪造个合法的Referer就能 达到欺骗的目的,Python代码实例:
1 url = 'http://www.qcfans.cn/soft/download.asp?softid=3317&downid=9&id=3321'
2 opener = urllib2.build_opener(urllib2.HTTPHandler)
3 opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3')]
4 opener.addheaders = [('Referer', ' http://www.qcfans.cn/soft/download.asp?softid=3317')]
5 urllib2.install_opener(opener)
6 response = urllib2.urlopen(url)
7 the_page = response.read()
8 print the_page
打印出的结果:
<script src="http://ufile.7pk.com/Flashget_union.php?fg_uid=17826"></script>
<script>function ConvertURL2FG(url,fUrl,uid){ try{ FlashgetDown(url,uid); }catch(e){ location.href = fUrl; }}
function Flashget_SetHref(obj){obj.href = obj.fg;}</script>
<script>ConvertURL2FG('Flashget://W0ZMQVNIR0VUXWh0dHA6Ly9sb3ZlLnFjZmFucy5jbi9kb3duL3BwdC/G+7O1t6K2r7v6ubnU7NPr0N7A7S+12rDL1cIgt6K2r7v6tcTXsMXkoaK199X70+vEpbrPLnBwdFtGTEFTSEdFVF0=&17826','http://www.qcfans.cn',17826)</script>
Ok,第二个问题出来了,瞧:
Q: 我不想使用FLASHGET进行下载,如何得到真实的资源地址呢?
A: 这里涉及到FlashGet专用地址与统一资源定位符转换的问题,具体的算法很简单(就文章发布前而言):
首先,我们提取flashget的地址
Flashget://W0ZMQVNIR0VUXWh0dHA6Ly9sb3ZlLnFjZmFucy5jbi9kb3duL3BwdC/G+7O1t6K2r7v6ubnU7NPr0N7A7S+12rDL1cIgt6K2r7v6tcTXsMXkoaK199X70+vEpbrPLnBwdFtGTEFTSEdFVF0=&17826
然后将其地址的协议前缀 Flashget:// 和等号后的 &17826 去掉。
将处理过的地址字符串进行Base64解码,看Python 实例:
1 print base64.decodestring("W0ZMQVNIR0VUXWh0dHA6Ly9sb3ZlLnFjZmFucy5jb\
2 i9kb3duL3BwdC/G+7O1t6K2r7v6ubnU7NPr0N7A7S+12rDL1cIgt6K2r7v6tcTXsMXko\
3 aK199X70+vEpbrPLnBwdFtGTEFTSEdFVF0="))
见print输出的结果如下:
[FLASHGET]http://love.qcfans.cn/down/ppt/汽车发动机构造与修理/第八章 发动机的装配、调整与磨合.ppt[FLASHGET]
ok,现在显而易见了吧,取 [FLASHGET] 标记内的地址 就是真实的资源地址!
关键代码在此,其余的代码就不浪费篇幅陈述了。
到此,玩弹弹堂去了。。。 |
|