天猫商品详情爬取
发布时间
阅读量:
阅读量
天猫商品详情爬取
- 实战讲解
- 商品信息提取
- 运行返回结果
- 最后
实战讲解
天猫商品详情爬取相比淘宝商品详情拿到相对容易得多。同样地,在未登录的情况下PC端拿到的价格与库存数据会出现偏差;另外一种方法是直接提取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)
还没有任何评论哟~
