tmall天猫获取所有商品信息的采集规则(php json)

发现tmall页面的静态内容采用了cdn分片,页面中变化的内容,都放到了cdn里,所有商品的信息都可以在JSON中获取,也许是方便在更新商品的时候,不用更新商品详情页的静态文件吧。
下面的代码可以读取商品的详细信息,并对信息做了简单处理,方便火车采集器采集调用

<?php
$url = 'http://tdecorate.tbcdn.cn/dc/fetchDc.htm?pid=72854835&sellerId=130974249';
$url = 'http://tdecorate.tbcdn.cn/dc/fetchDc.htm?pid=640211846&sellerId=737591379';

$html = @file_get_contents($url);
echo tidy($html);

function tidy($html)
{
	//过滤js中的换行符
	$html = str_replace(array('\r', '\n', '\t', 'http://a.tbcdn.cn/kissy/1.0.0/build/imglazyload/spaceball.gif', 'data-ks-lazyload'),
						array("\r", "\n", "\t", '', 'src'),
						$html);
	
	//Js unicode解码
	$html = unicode_decode($html);
	
	//去掉反斜杠转议符
	$html = stripslashes($html);
	
	//过滤特殊样式
	$html = str_replace(array(' src="http://a.tbcdn.cn/kissy/1.0.0/build/imglazyload/spaceball.gif"', 'data-ks-lazyload'),
						array('', 'src'),
						$html);
	
	//匹配出内容
	$html = get_desc($html);
	
	return trim($html);
}

function unicode_decode($string)
{
    $string = preg_replace_callback('#\\\u([0-9a-f]{4})#ism', create_function('$matches', 'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'), $string);
    return $string;
}

function get_desc($html)
{
	preg_match('@"DcTopRight"[\s\S]*?"html":"([\s\S]*?)\s+\},@is', $html, $match);
	return $match[1];
}

发表评论

电子邮件地址不会被公开。