查看原文
其他

简易 Playwright 爬虫,帮你实现壁纸自由

码中人 码农真经 2024-02-11

vavebg.com

最近发现一个非常哇塞的壁纸网站:Vave BG - Unsplash but for background[1]

vavebg

"Vave BG "是一个人工智能生成的图片项目,由 Gyoza 于 2023 年 10 月创建。目前,Vave BG 作为一个类似于 Unsplash 的图片库在运营,所有图片均由 Gyoza 使用各种人工智能工具精心制作而成,其中大部分图片目前是通过 Midjorney 生成的。

Vave BG 在 CC0 许可下运行,这是一项极为宽松的协议,允许他人以几乎任何目的自由下载、修改、分发甚至商业化 Vave BG 上的作品。这种自由延伸到艺术作品的使用,无需额外许可或承担经济责任。通过采用 CC0 许可,Vave BG 打开了无限创意探索和跨领域合作的大门,邀请个人无拘无束地参与、改编艺术作品,甚至从中获利。


非常 Nice 的壁纸网站,并且是AI生成的,免费无版权,可以自由使用。跟我的 魔力美少女 – 你的 AI 女孩!AI画图 | AIGC[2] 有异曲同工之妙。

于是我用 Playwright 写了一个爬虫,把这个网站的壁纸全部下载下来,并且把相关的Prompt信息等元数据也保存下来。

vavebg

Playwright 爬虫

Playwright 是一个 Node.js 库,用于自动化 Chromium、WebKit 和 Firefox 浏览器。Playwright 旨在提供一个更快、更可靠和更精确的替代方案,与 Puppeteer 兼容。

安装 Playwright

npx playwright install

实现原理

实现原理很简单,就是用 Playwright 打开网页,然后模拟鼠标滚动,把所有的壁纸都加载出来,然后获取所有的壁纸链接,再逐个打开壁纸详情页,获取壁纸的标题、描述、下载链接等信息,最后把壁纸下载下来。

完整代码

// 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 == 0return;
        page.evaluate(() => {
            window.scrollBy(0window.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

往期推荐

欢迎关注我的公众号“码农真经”,原创技术文章第一时间推送。

引用链接

[1] Vave BG - Unsplash but for background: https://vavebg.com/
[2] 魔力美少女 – 你的 AI 女孩!AI画图 | AIGC: https://moligirls.com/


继续滑动看下一个

简易 Playwright 爬虫,帮你实现壁纸自由

码中人 码农真经
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存