今天尝试抓取淘宝店铺的信用等级,由于淘宝的信用等级是按照图片来进行显示的,所以需要根据显示的图片来转换到对应的信用等级。
查看淘宝的源码,发现店铺的信用在店铺首页的如下代码中
1 2 3 4 5 |
<span class="shop-rank"> <a class="rank-icon J_TGoldlog" target="_blank" href="http://rate.taobao.com/user-rate-UvFcbMFNbvF8L.htm?spm=a1z10.1.0.0.TCWOEx" data-goldlog-id="/tbwmdd.1.045" data-spm-anchor-id="a1z10.1.0.0"> <img class="rank" border="0" align="absmiddle" src="http://pics.taobaocdn.com/newrank/s_blue_1.gif"> </a> </span> |
在代码中 data-spm-anchor-id="a1z10.1.0.0" 这个参数网上没有相关信息,个人理解应该是某种追踪参数。
在img的代码中,可以获取到src值,值的最后 s_blue_1.gif 就是信用等级,只需要取得该值然后分解为相应的参数即可。
在simplehtmldom中可以通过 $html->find('.rank',0)->getAttribute('src') 获取到图片的链接
然后通过下面的函数来取得文件名
1 2 3 4 5 |
function retrieve($url){ preg_match('/\/([^\/]+\.[a-z]+)[^\/]*$/',$url,$match); var_dump($match); return $match[1]; } |
函数输出结果: s_blue_3.gif
然后对结果进行分析
1 2 3 4 5 |
function aplit_rank($rank){ $shop_rank = substr($rank,0,strlen($rank)-4); $shop_rank = explode('_', $shop_rank); return $shop_rank; } |
函数输出数组: array(3) { [0]=> string(1) "s" [1]=> string(4) "blue" [2]=> string(1) "3" }
数组第一个值是一个前缀
数组第二个值对应信用的等级
1 2 3 4 |
red=>红心 blue=>蓝钻 cap=>蓝皇冠 crown=>黄皇冠 |
数组第三个值从1到5,分别对应每个等级的皇冠数量
然后是抓取店铺动态评分
1 2 3 4 5 6 7 8 |
//第一类店铺 $shop_rate_desc = $html->find('.shop-rate',0)->find('.count',0)->plaintext; $shop_rate_serv = $html->find('.shop-rate',0)->find('.count',1)->plaintext; $shop_rate_ship = $html->find('.shop-rate',0)->find('.count',2)->plaintext; //第二类店铺 $shop_rate_desc = $html->find('.shop-credit',0)->find('.count',0)->plaintext; $shop_rate_serv = $html->find('.shop-credit',0)->find('.count',1)->plaintext; $shop_rate_ship = $html->find('.shop-credit',0)->find('.count',2)->plaintext; |
最后抓取的成果
对错误反馈进行分析
1.店铺没有评价
解决方法:通过 if($shop_rate_desc=='') 判断,为空则无评价
2.店铺已关闭
解决方法:通过 if($html->find('.shop-rate',0)) 和 elseif($html->find('.shop-credit',0)) 判断,都不符合就可判断为无店铺信息
There are no comments yet