美桌网(http://www.win4000.com/)是一个壁纸图片网站,我想下载它的“二次元桌面壁纸”专题里的所有图片。但是这个专题有 5 个列表页,里面有 120 个图册,每个图册又有 8 张左右的图片,合起来有近千张图片。所以我写了个脚本用来自动抓取美桌网的壁纸图片网址。
该脚本可以在美桌网的任意列表页使用,就是图片列表底下有页码的:
在列表页打开浏览器控制台,复制下面的脚本内容粘贴进去,按 enter 执行。等执行完毕,会打开一个新窗口输出图片网址。
代码:
/*
name: 美桌网壁纸批量下载工具
url: http://www.win4000.com/
version: 0.1
date: 20190213
author: 雪见仙尊
*/
// 获取图片网址
let listpage_urls = []; // 列表页的 url
let page_urls = []; // 图片页面的 url
let img_urls_big = []; // 壁纸大图的 url
// 获取列表页的 url
let base_url = location.href.replace(/(_\d)(\.html)/, '$2'); // 去掉页码部分,作为列表页规则
let page_num = document.querySelectorAll('.pages a.num').length + 1; // 一共有几页,+1 加的是当前页
for (let index = 1; index <= page_num; index++) { // 加上页码
listpage_urls.push(base_url.replace('.html', '_' + index + '.html'));
}
console.log('共抓取到' + listpage_urls.length + '个列表页');
getPageUrls();
// 获取图片页面的 url
function getPageUrls(url) {
url = listpage_urls.shift();
fetch(url)
.then(res => res.text())
.then(data => {
let dom = new DOMParser().parseFromString(data, 'text/html');
let page_list = dom.querySelectorAll('.Left_bar .tab_box ul li>a');
for (const a of page_list) {
page_urls.push(a.href);
}
if (listpage_urls.length) {
getPageUrls();
} else {
console.log('共抓取到' + page_urls.length + '个图片页');
getImgUrls();
}
})
}
// 获取壁纸大图的 url
function getImgUrls(url) {
url = page_urls.shift();
fetch(url)
.then(res => res.text())
.then(data => {
let dom = new DOMParser().parseFromString(data, 'text/html');
let img_urls_small = dom.querySelectorAll('#scroll a img');
for (const img of img_urls_small) {
img_urls_big.push(img.dataset['original'].replace(/_.*\d/, ''));
}
if (page_urls.length) {
getImgUrls();
} else {
console.log('共抓取到' + img_urls_big.length + '个图片网址');
let result = img_urls_big.reduce((total, cur) => {
return total += cur + '<br>';
}, '');
let new_tab = window.open();
new_tab.document.write(result);
new_tab.document.close();
}
})
}
执行过程:
输出网址:
全选复制,就可以用下载器批量下载了。迅雷什么的都行。
Google Chrome 73
Windows 7 我来暖高级说说了
我来暖高级说说了