qq_29717639 2025-01-21 19:52 采纳率: 0%
浏览 17

亚马逊商品图采集问题

采集亚马逊商品的主图时,采集出来的图片链接打开永远都是500*500的尺寸,不是原图尺寸,请问要怎么调整才能采集到原图尺寸

// 获取图片URL
function getProductImages() {
  let orderedImages = []; // 用于保持图片顺序
  const seenUrls = new Set(); // 用于去重

  // 获取轮播图容器
  const altImages = document.getElementById('altImages');
  if (altImages) {
    // 获取所有图片项目
    const thumbnailItems = altImages.querySelectorAll('li.item, li.imageThumbnail');
    console.log(`找到轮播图项目数量: ${thumbnailItems.length}`);

    // 处理每个图片项目
    Array.from(thumbnailItems).forEach((item, index) => {
      if (index >= 5) return; // 只处理前5张图片
      if (item.querySelector('.videoThumbnail')) return; // 跳过视频缩略图

      let imageUrl = null;

      // 1. 尝试从图片查看器链接获取大图URL
      const popoverTrigger = item.querySelector('[data-image-large-src]');
      if (popoverTrigger) {
        imageUrl = popoverTrigger.getAttribute('data-image-large-src');
        console.log(`从查看器获取第${index + 1}张图片:`, imageUrl);
      }

      // 2. 如果没有找到,尝试从data-a-dynamic-image获取
      if (!imageUrl) {
        const img = item.querySelector('img[data-a-dynamic-image]');
        if (img) {
          try {
            const dynamicData = JSON.parse(img.getAttribute('data-a-dynamic-image'));
            // 获取最大尺寸的图片
            const urls = Object.keys(dynamicData);
            if (urls.length > 0) {
              imageUrl = urls[0];
              console.log(`从dynamic-image获取第${index + 1}张图片:`, imageUrl);
            }
          } catch (e) {
            console.error('解析dynamic-image失败:', e);
          }
        }
      }

      // 3. 如果还是没有,尝试从data-old-hires获取
      if (!imageUrl) {
        const img = item.querySelector('img[data-old-hires]');
        if (img) {
          imageUrl = img.getAttribute('data-old-hires');
          console.log(`从old-hires获取第${index + 1}张图片:`, imageUrl);
        }
      }

      // 4. 最后尝试从普通img标签获取
      if (!imageUrl) {
        const img = item.querySelector('img');
        if (img) {
          imageUrl = img.src;
          console.log(`从img.src获取第${index + 1}张图片:`, imageUrl);
        }
      }

      // 验证和添加URL
      if (imageUrl && typeof imageUrl === 'string') {
        // 移除查询参数
        imageUrl = imageUrl.split('?')[0];
        
        if (!imageUrl.includes('sprite') && 
            !imageUrl.includes('play-icon') && 
            !imageUrl.includes('video-slate') &&
            imageUrl.includes('images/I')) {
          
          // 使用原始URL作为唯一标识
          if (!seenUrls.has(imageUrl)) {
            seenUrls.add(imageUrl);
            orderedImages.push(imageUrl);
            console.log(`成功添加第 ${orderedImages.length} 张图片:`, imageUrl);
          }
        }
      }
    });
  }

  // 如果没有找到图片,使用主图
  if (orderedImages.length === 0) {
    const mainImage = document.getElementById('landingImage');
    if (mainImage) {
      let mainImageUrl = mainImage.getAttribute('data-old-hires');
      if (!mainImageUrl) {
        mainImageUrl = mainImage.src;
      }
      if (mainImageUrl) {
        orderedImages.push(mainImageUrl.split('?')[0]);
      }
    }
  }

  console.log('找到不重复图片数量:', orderedImages.length);

  // 如果图片不足5张,复制第一张图片
  while (orderedImages.length < 5) {
    orderedImages.push(orderedImages[0] || '');
  }

  // 确保只返回5张图片
  return orderedImages.slice(0, 5);
}

  • 写回答

4条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在亚马逊商品页面上采集图片时,经常会遇到图片链接显示尺寸与原图尺寸不一致的问题。针对您所描述的情况,如果您想获取亚马逊商品的原图尺寸,可以尝试以下几个步骤来调整您的代码:

    1. 确认图片链接的正确性:确保您获取的链接是正确的原图链接,而不是某种缩略图或特定尺寸的链接。有时候亚马逊会使用不同的链接来提供不同尺寸的图片。

    2. 解析动态图片链接:如果您的代码是从动态生成的图片元素中获取链接,确保解析的是正确的图片尺寸。可能亚马逊根据不同的设备和屏幕尺寸使用不同的图片链接和尺寸。您可以尝试获取完整的动态图像数据,并从中选择原图尺寸的链接。

    3. 使用开发者工具调试:打开亚马逊的商品页面,并使用浏览器的开发者工具(通常是按F12键可以打开)来检查网络请求。当您点击图片或者页面上的某个与图片相关的部分时,观察哪些请求被发起,并尝试获取这些请求的完整链接。这样您可以确定正确的图片链接格式和尺寸。

    针对您的代码,这里有一些调整建议:

    • 确保您处理的是正确的图片元素,特别是当亚马逊改变页面结构或添加新的类名时。
    • 在获取图片链接后,尝试添加一些参数来获取不同尺寸的图片,例如添加查询参数_src或类似的参数来获取原图尺寸。
    • 使用浏览器的开发者工具跟踪网络请求,查看哪些请求返回了原图尺寸的图像,并相应地调整您的代码来捕获这些链接。

    另外,如果您发现亚马逊使用了反爬虫机制来限制图片的访问或者改变图片的URL结构,您可能需要考虑使用更高级的技术,比如使用Selenium自动化工具来模拟浏览器行为,或者使用第三方服务提供的API来获取商品图片。请注意在使用这些技术时需要遵守亚马逊的使用条款和政策。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月21日