javascript - 从网页获取所有图像并以编程方式保存到磁盘(NodeJS 和 Javascript)

标签 javascript node.js web-scraping

我需要从几个网站获取大量图像并将它们下载到我的磁盘以便我可以使用它们(将它们上传到 blob (azure) 然后将链接保存到我的数据库)。

获取图像

我知道如何使用 JS 从 html 中获取图像,例如其中一个我会制作一个 for 循环并执行:

document.getElementsByClassName('person')[i].querySelector('div').querySelector('img').getAttribute('src')

在那里我会得到所有图片的链接。

保存图像

我还看到我可以使用 Node 和 fs 模块将文件保存到磁盘,方法是:

function saveImageToDisk(url, localPath) {var fullUrl = url;
var file = fs.createWriteStream(localPath);
var request = https.get(url, function(response) {
response.pipe(file);
});

如何将它们放在一起

这是我卡住的地方,我不知道如何连接这两个部分(脚本和 nodejs 代码),我想获取图像以及图像名称(在本例中为 alt 标记)和然后在 Node 中使用它们将图像上传到 blob,并将它们的名称和图像 blob url 放入我的数据库中。

我以为我可以下载 html 页面,然后将 JS 脚本放在正文的底部,但我不知道如何将 url 传递给 nodejs 代码。

我该怎么做?

我不太习惯使用脚本,我主要使用没有它们的 Node ,我对它们的交互以及如何将 js 脚本连接到我的代码感到有点困惑。

此外,这是解决此问题的最佳方法还是我没有看到更简单/更好的方法?

最佳答案

这个感觉应该用爬虫吧。以下代码应该可以工作(使用 npm 模块 crawler ):

const Crawler = require("crawler")

const c = new Crawler({
    callback: function(error, res, done) {
        if (error) {
            console.log({error})
        } else {
            const images = res.$('.person div img')
            images.each(index => {
                // here you can save the file or save them in an array to download them later
                console.log({
                    src: images[index].attribs.src,
                    alt: images[index].attribs.alt,
                })
            })
        }
    }
})

c.queue('https://www.yoursite.com')

关于javascript - 从网页获取所有图像并以编程方式保存到磁盘(NodeJS 和 Javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54442906/

相关文章:

javascript - 从检查元素中隐藏文件?

javascript - 如何通过文档写入在span中显示php文件输出?

javascript - 将 JavaScript 文件加载到另一个 JavaScript 文件中

html - 如何提取向下滚动时进一步加载的完整表格?

javascript - 如何在 Python 中抓取包含动态内容(由 JavaScript 创建)的页面?

python - 如何从操纵延迟加载方法的网页中获取所有数据?

javascript - window.location in IE base href

javascript - Node ExpressJS |如何通过自定义查询参数验证

node.js - 我可以更改 jasmine-node 的输出以在控制台中显示通过的测试以及失败的测试吗?

php - 从 PHP 向 Node.js(socket.io) 发送请求