今天,群里一位童鞋碰到的一个问题,本着互帮互助的无私精神,帮他研究了下,现总结如下:
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] 标记内的地址 就是真实的资源地址!
关键代码在此,其余的代码就 不浪费篇幅陈述了。
到此,玩弹弹堂去了。。。
暂时没有评论