vavebg.com
最近发现一个非常哇塞的壁纸网站:Vave BG - Unsplash but for background。
“Vave BG “是一个人工智能生成的图片项目,由 Gyoza 于 2023 年 10 月创建。目前,Vave BG 作为一个类似于 Unsplash 的图片库在运营,所有图片均由 Gyoza 使用各种人工智能工具精心制作而成,其中大部分图片目前是通过 Midjorney 生成的。
Vave BG 在 CC0 许可下运行,这是一项极为宽松的协议,允许他人以几乎任何目的自由下载、修改、分发甚至商业化 Vave BG 上的作品。这种自由延伸到艺术作品的使用,无需额外许可或承担经济责任。通过采用 CC0 许可,Vave BG 打开了无限创意探索和跨领域合作的大门,邀请个人无拘无束地参与、改编艺术作品,甚至从中获利。
非常 Nice 的壁纸网站,并且是AI生成的,免费无版权,可以自由使用。跟我的 魔力美少女 – 你的 AI 女孩!AI画图 | AIGC 有异曲同工之妙。
于是我用 Playwright 写了一个爬虫,把这个网站的壁纸全部下载下来,并且把相关的Prompt信息等元数据也保存下来。
Playwright 爬虫
Playwright 是一个 Node.js 库,用于自动化 Chromium、WebKit 和 Firefox 浏览器。Playwright 旨在提供一个更快、更可靠和更精确的替代方案,与 Puppeteer 兼容。
安装 Playwright
- 安装 Playwright 支持的浏览器二进制文件
你也可以单独安装某个浏览器的二进制文件,比如:单独安装 Chromium
1
|
npx playwright install chromium
|
- 安装 Playwright 的 Node.js 库
实现原理
实现原理很简单,就是用 Playwright 打开网页,然后模拟鼠标滚动,把所有的壁纸都加载出来,然后获取所有的壁纸链接,再逐个打开壁纸详情页,获取壁纸的标题、描述、下载链接等信息,最后把壁纸下载下来。
完整代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
// index.js
const fs = require('fs');
const https = require('https');
const playwright = require('playwright');
(async () => {
// const browser = await playwright.chromium.launch({ headless: false });
const browser = await playwright.chromium.launch();
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://vavebg.com/');
function scrollToBottom(times) {
if(times == 0) return;
page.evaluate(() => {
window.scrollBy(0, window.innerHeight);
});
page.waitForTimeout(1000);
scrollToBottom(times - 1);
}
scrollToBottom(100);
const links = await page.$$eval('a.framer-8q182g', (links) => {
return links.map((a) => a.href);
});
for (const link of links) {
console.log(link);
await page.goto(link);
const div = await page.$('div.framer-1fdy7hm');
const title = await div.$eval('div.framer-1r7ny1t', (div) => div.textContent);
if(fs.existsSync(title)) continue;
const prompt = await div.$eval('div.framer-1ulmyg', (div) => div.textContent);
const downloadLink = await div.$eval('div.framer-j8crh3-container a', (a) => a.href);
fs.mkdirSync(title);
fs.writeFileSync(`${title}/readme.md`, `# ${title}\n\n${prompt}\n\n![${title}](${downloadLink})\n\n[Download](${downloadLink})`);
console.log(downloadLink);
https.get(downloadLink, (res) => {
res.pipe(fs.createWriteStream(`${title}/${title}.jpeg`));
});
await page.waitForTimeout(1000);
}
page.close();
})();
|
node index.js
即可。
打包下载
我把所有的壁纸打包下载了,放在了我的网盘上,有需要的可以下载。
链接:https://pan.baidu.com/s/1WALU6BcEZcFRNz9sMEsc6Q?pwd=1234
提取码:1234