node.js - 给定一个 URL,使用 Node 检索该页面上最大的图像

标签 node.js express

我希望在 Angular.js Web 应用程序中构建一项功能,允许用户将 URL 粘贴到 Amazon 或 Zappos 等电子商务网站,并从该页面检索主要产品图像。我的计划是将 URL 发布到我的 Express API 并在服务器上处理图像检索。

我最初的计划是下载原始 html,用 htmlparser 解析它。 ,选择所有带有 soupselect 的 html 图像元素并检索它们的 src 属性。理想情况下,我想实现一个可以跨任何站点工作的解决方案,而不仅仅是为特定零售商的站点硬编码值(使用特定的已知 CSS 类名)。我做出的假设之一是页面上最大的图像可能是主产品图像,根据这个逻辑,我决定尝试按文件大小对图像进行排序。我的想法是使用每个图像的 src url 发出 http head 请求,以通过 content-length header 属性确定其大小。到目前为止,这种方法效果很好,但我真的很想避免发出这么多的 http 请求,即使它们只是头请求。

我觉得有更好的方法来做到这一点,使用 PhantomJS 之类的东西来加载整个页面并以这种方式解析它会更容易吗?我试图尽快完成这项工作,从而避免下载所有图像。有人有什么建议吗?

最佳答案

我认为最好使用的图像不是文件大小最大的图像,而是页面上显示最大的图像。 PhantomJS 或许可以帮助您确定这一点。加载页面,但指示 PhantomJS 不要加载图像。然后选择计算出的尺寸最大的图像元素。仅当页面使用 CSS 或 img 上的宽度和高度属性来赋予其尺寸时,这才有效。

或者,您可以将图像 URL 发送回客户端,让客户端获取图像并找出最大的图像。这限制了服务器必须发出的请求数量,并且如果最大的图像不是最好的,它允许用户快速选择不同的图像。

关于node.js - 给定一个 URL,使用 Node 检索该页面上最大的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15627580/

相关文章:

node.js - 在无服务器 Node 实例上存储 AWS IoT 凭证的最佳方式?

node.js - 在 OSX 上安装 nodejs 的最佳方法是什么?

reactjs - OpenID 连接/节点/ react

html - 使用 Express.js 提供纯文本 SVG(与 Cheerio.js 相关的解决方案)

node.js - Mean Stack 应用程序中的部分页面渲染问题

node.js - 我们可以在node.js中使用process.hrtime()作为UUID吗?

node.js - 无法在 Nodejs Typescript 应用程序中导入 URL 类

javascript - 当客户端调用断开连接时,Socket.io 服务器未收到 'disconnect' 事件

node.js - ExpressJS - 联系外部 API

css - Express static 不会从 root 加载 CSS 文件