网络绝大部分所爬取的壁纸URL类似这样:
https://pic.netbian.com/uploads/allimg/180315/110404-1521083044b19d.jpg
然而显然这是大概在
1200
×
600
1200\times600
1200×600左右像素的直接可右击存储的壁纸,并非我们想要的
4
K
4K
4K.
彼岸图网非会员每日仅限下载一张壁纸,这足够拿来分析.
打开
G
o
o
g
l
e
C
h
r
o
m
e
Google \ Chrome
Google Chrome,开启老朋友开发者工具
的Network
,选择一张壁纸下载,首先会GET
类似下面这样的请求:
https://pic.netbian.com/e/extend/downpic.php?id=18853&t=0.9454025258099892
Preview
得到:
{msg: 4, pic: "/downpic.php?id=18853&classid=53"}
msg: 4
pic: "/downpic.php?id=18853&classid=53"
这意味着此次点击向其服务器发送了请求id
为18853
的壁纸,紧接着会GET
到
4
K
4K
4K壁纸的链接:
https://pic.netbian.com/downpic.php?id=18853&classid=53
id
即壁纸id
,那么上面的t
是什么,msg
又是什么,需要去js
里分析,刷新当前页面,在Network
里选择JS
,会看到common.js
,里面很容易找到:
//下载壁纸
$(".downpic a").click(function() {
var id = $(this).attr("data-id");
$.getJSON('/e/extend/downpic.php?id=' + id + '&t=' + Math.random(), function(data) {
if (data.msg == 0) {
$("#login_opacity_bg,.tbox").fadeIn(300);
weixinlogin();
} else if (data.msg == 1) {
$("#footer").before('<div class="tbox viptps"><div class="close">×</div><div class="vipcon">今日下载量已用完,<a href="/e/member/buygroup/" title="赞助1元即可下载">赞助1元即可下载</a></div></div><div id="login_opacity_bg"></div>');
vipmsg();
} else if (data.msg == 2) {
$("#footer").before('<div class="tbox viptps"><div class="close">×</div><div class="vipcon">今天已下载20张,<a href="/e/member/buygroup/" title="赞助会员">升级年会员海量下载</a></div></div><div id="login_opacity_bg"></div>');
vipmsg()
} else if (data.msg == 3) {
if (data.pic) {
var txt = '<br />3秒后继续下载';
setTimeout('goback(\'' + data.pic + '\')', 3000);
} else {
var txt = '';
}
$("#footer").before('<div class="tbox viptps"><div class="close">×</div><div class="vipcon">' + data.info + txt + '</div></div><div id="login_opacity_bg"></div>');
$("#login_opacity_bg,.tbox").fadeIn(300);
weixinlogin();
$(".tbox .close ").click(function() {
$(".tbox,#login_opacity_bg").fadeOut(300).remove();
});
} else if (data.msg == 5) {
$("#footer").before('<div class="tbox viptps"><div class="close">×</div><div class="vipcon">一台电脑免费下载一张,<a href="/e/member/buygroup/" title="赞助送会员">立即赞助送会员</a></div></div><div id="login_opacity_bg"></div>');
vipmsg();
} else {
//window.location.href=data.pic;
// window.open(data.pic);
$('<iframe style="display:none;"/>').appendTo('html').attr('src', data.pic);
}
});
});
由'&t=' + Math.random()
可知t
是[0,1]
间的随机数,msg
则是请求数据的类型,不同的msg
值对应着不同的返回结果,到这里拟构造请求:
https://pic.netbian.com/e/extend/downpic.php?id=YOUR_IDEAL_IMAGE_ID&t=A_RANDOM_NUMBER_BETWEEN ZERO_AND_ONE
结果是:
{"msg" : 1}
这是因为非会员单日下载一张壁纸的限制,欲突破此限制,首先需要会员 (这是不可避免的),接下来便可拿到会员账号的cookie
(这是关键),携带此cookie
进行请求即可.
− − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − − --------------------------------- −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
网络上绝大多数所谓爬虫不过爬取了上述提到的中等质量壁纸,这对于追求极品画质的人显然是不够的,然而贫穷的固有限制阻挡了目前的脚步,就此放弃未免太过遗憾,这里不妨换一个角度出发,比如拿到 1200 × 600 1200\times600 1200×600左右像素的壁纸后,将其无损放大,即升级画质.
基于深度卷积神经网络的waifu2x
是不错的选择,关于其介绍可自行Google
.
A
.
\mathcal{A}.
A.如果是广泛浏览但仅追求少数优质壁纸,可直接前往waifu2x
的官方网站 (免费),这里的默认链接是中国的index
,如果可科学上网,日本源址是不错的选择.
B
.
\mathcal{B}.
B.如果想将升格合并到爬虫之中,便需要API
,庆幸的是,作者在DeepAI
提供了免费的waifu2x API
,里面提供了JS
、Python
、C sharp
等接口,详情见Waifu2x API Documentation
,这里以Python为例,可以看到:
# Ensure your pyOpenSSL pip package is up to date
# Example posting a image URL:
import requests
r = requests.post(
"https://api.deepai.org/api/waifu2x",
data={
'image': 'YOUR_IMAGE_URL',
},
headers={'api-key': 'YOUR_API_KEY'}
)
print(r.json())
# Example posting a local image file:
import requests
r = requests.post(
"https://api.deepai.org/api/waifu2x",
files={
'image': open('/path/to/your/file.jpg', 'rb'),
},
headers={'api-key': 'YOUR_API_KE'}
)
print(r.json())
作者同时提供了image url
和local image
两种API
,根据需求使用不同的API
即可,这里注意到api-key
也是免费获取的,只需在DeepAI
注册账号.
一点遗憾
如果采取
API
,放大比例大概在1.3
倍左右,同时也可能进行了未知程度的降噪,这并不符合用户的特定要求 (例如官网中可选择的降噪和放大比例),目前我还没能发现API
里具备可调节的相关参数 (期待大家挖掘,欢迎留言).
C
.
\mathcal{C}.
C.鉴于以上情况,另外一种方式便是使用其官方网站的API
,在准备大展身手之前要注意到官网已经添加了Google
的reCAPTCHA
人机验证,如果有需求进行此种方式,需要花费一定的金额去购买recognition API
,有时往往金钱能节省一大部分时间,尤其是金额在较低或可接受的范围内,这里给出2captcha的传送门,在解决人机认证的问题后,只需如往常爬虫一样,去分析waifu2x
官网的逻辑 (参数很少),模拟请求即可.
D
.
\mathcal{D}.
D.当然还有一种方式,那就是构建属于自己的waifu2x
,作者慷慨的开源使无数人受益良多,如果具备不错的电脑设备,这或许是最佳的选择.