我希望在 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/