Advertisement

天猫商品详情爬取

阅读量:

天猫商品详情爬取

  • 实战讲解
  • 商品信息提取
  • 运行返回结果
  • 最后

实战讲解

天猫商品详情爬取相比淘宝商品详情拿到相对容易得多。同样地,在未登录的情况下PC端拿到的价格与库存数据会出现偏差;另外一种方法是直接提取H5级别的详细信息。

在这里插入图片描述
在这里插入图片描述
这个信息就是我们需要的h5详细信息

商品信息提取

复制代码
     		Map<String, String> skuIdAndPromotionPriceMap = null;
        //原价的价格区间
        String strJson = "";
        String dataJson = "";
        if (promotionPriceFromH5) {
            // h5端的促销价,如果SKU没库存的话,就不会显示促销价,而是显示原价
            Map<String, String> strMap = SalePriceFromWarePageUtil.getPromotionPrice4TmallFromH5(page);
            if (MapUtils.isNotEmpty(strMap)) {
                strJson = strMap.get("jsonStr");
                skuIdAndPromotionPriceMap = SalePriceFromWarePageUtil.parseTmallH5JsonStr(strJson);
                dataJson = strMap.get("dataDetailJson");
            }
        } else {
            // PC端的促销价,如果SKU没库存的话,就不会显示促销价,而是显示原价
            skuIdAndPromotionPriceMap = SalePriceFromWarePageUtil.getPromotionPrice4TmallFromPc(page);
        }
        String[] salePriceArr = this.collectSalePriceByPromPrice(skuIdAndPromotionPriceMap);
    
        /* * 成本价格
         */
        super.setCostPrice(salePriceArr[0]);
        super.prepareMakeMaxSkuPriceByMaxCostPrice(salePriceArr[1]);
        /* * 标题
         */
        this.collectTitle();
        /* * 货号
         */
        String roomProductNo = ProductNoFromWarePageUtil.getProductNo4Tmall(page);
        super.setProductNo(roomProductNo);
    
        /* * 尺码 颜色
         */
        List<Selectable> sizeSalePropList = Lists.newArrayList();
        SetColorListAndSizeList setColorListAndSizeList = new SetColorListAndSizeList(sizeSalePropList).invoke();
        sizeSalePropList = setColorListAndSizeList.getSizeSalePropList();
        Selectable colorSelectable = setColorListAndSizeList.getColorSelectable();
        List<String> colorNameList = setColorListAndSizeList.getColorNameList();
        /* * 主图们和第一张图片
         */
        List<String> mainImageUrlList = MainImageUrlFromWarePageUtil.getMainImageUrlList4Tmall(page, "_60x60q90.jpg");
        super.setMainImageListAndFirstGoodsImgUrl(mainImageUrlList);
        /* * 颜色图
         */
        this.collectColorImageList(colorSelectable, colorNameList);
        /* * SKU库存和价格
         */
        Map<String, String> dataValueAndOtherSalePropNameMap = Maps.newHashMap();
        //颜色销售属性的ID代号  data-value="1627207:6128713079"
        Map<String, String> dataValueAndColorSalePropNameMap = Maps.newHashMap();
    
        /* * 销售属性的代号与名字对应关系
         */
        this.collectSalePropDataValueAndName(colorSelectable, sizeSalePropList, dataValueAndOtherSalePropNameMap, dataValueAndColorSalePropNameMap);
        if (!dataValueAndOtherSalePropNameMap.isEmpty() || !dataValueAndColorSalePropNameMap.isEmpty()) {
            this.collectSkuList(skuIdAndPromotionPriceMap, dataValueAndOtherSalePropNameMap, dataValueAndColorSalePropNameMap);
        }
        /* * 售价
         */
        String salePrice = super.makeAndSetSalePrice(salePriceArr[0]);
        /* * 市场价格
         */
        super.makeAndSetMarketPrice(salePrice, goodsBasicInfoPojo.getSkuList());
        /* * 详情图
         */
        this.fetchDetailDesc();
        /* * 视频
         */
        this.fetchMainVideoUrl();
    
        //发货地,是否包邮,商品原价,是否是预售商品
        setDestinationName(strJson);
        //设置好评和评论数
        getPraiseRateAndCommentsNum();
        //设置评论数和人气
        setOtherCommon(dataJson);
        //店铺名称
        String shopName = page.getHtml().xpath("//a[@class='slogo-shopname']/strong/text()").get();
        if (StringUtils.isNotBlank(shopName)) {
            goodsBasicInfoPojo.setShopName(shopName);
        }
        //掌柜
        Html html = new Html(page.getRawText());
        String manager = html.xpath("//li[@class='shopkeeper']//a/text()").get();
        if (StringUtils.isBlank(manager)) {
            manager = shopName;
        }
        if (StringUtils.isNotBlank(manager)) {
            goodsBasicInfoPojo.setManager(manager);
        }
        //销量
        setSalesVolume();
        //海外代购/海外购
        if (StringUtils.isNotEmpty(goodsBasicInfoPojo.getGoodsUrl())
                && StringUtils.contains(goodsBasicInfoPojo.getGoodsUrl(), DETAIL_TMALL_HK_ITEM)) {
            goodsBasicInfoPojo.setOverseasPurchase(true);
        }
        //设置图片类型
        goodsBasicInfoPojo.getImageSrcType().add("data-ks-lazyload");
        goodsBasicInfoPojo.getImageSrcType().add("src");

运行返回结果

在这里插入图片描述

最后

有任何问题请留言,或者联系微信yuj6545,谢谢

全部评论 (0)

还没有任何评论哟~