需求:通过淘宝或天猫商品链接,获取商品的评论。有疑问请直接留言。详细代码见:https://github.com/wangyupeng/code/blob/master/get_comment_list.php header("Content-type: text/html; charset=utf-8");function get_taobao_item_id($url){ // 解析url

需求:通过淘宝或天猫商品链接,获取商品的评论。有疑问请直接留言。详细代码见:https://github.com/wangyupeng/code/blob/master/get_comment_list.php
header("Content-type: text/html; charset=utf-8");
function get_taobao_item_id($url){
    // 解析url
    $urls=parse_url( $url );
    // 提取url,得到商品id
    // 一淘商品
    if ((strpos(@$urls['host'], 'etao.com') > 0) && (strpos(@$urls['host'], 'detail.etao.com')==0)) {
        $url_array = explode('.',$urls['path']);
        $id = ltrim($url_array[0],'/');
    // 淘宝商品
    } else if ((strpos(@$urls['host'], 'taobao.com') > 0) && (strpos(@$urls['host'], 'item.taobao.com')==0)) {
        parse_str($urls['query'],$url_array);
        $id = @$url_array['id'] ? $url_array['id'] : "" ;
    // 天猫商品
    } else if ((strpos(@$urls['host'], 'tmall.com') > 0 ) && (strpos(@$urls['host'], 'detail.tmall.com')==0)) {
        parse_str($urls['query'],$url_array);
        $id = @$url_array['id'] ? $url_array['id'] : "" ;
    // 非法商品
    }else{
        return false;
    }
    return $id;
}
/**
 * 下载淘宝页面
 * @param url $url
 * @return string
 */
function download_page($url) {
    // 创建一个新cURL资源
    $ch = curl_init();
    // 设置URL和相应的选项
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_REFERER, "http://www.taobao.com/");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    // 抓取URL并把它传递给浏览器
    $output = curl_exec($ch);
    // 关闭cURL资源,并且释放系统资源
    curl_close($ch);
    return $output;
}
/**
 * 获取淘宝评论URL
 * @param unknown $id
 * @return string
 */
function get_taobao_comment_url($id){
    $pages = download_page('http://item.taobao.com/item.htm?id='.$id);
    preg_match_all('/data-listApi="(.*)"/Usi', $pages, $commont);//评论列表地址
    $comment_list_url = $commont[1][0].'¤tPageNum=1&rateType=&orderType=sort_weight&showContent=1&attribute=&callback=?';
    return $comment_list_url;
}
/**
 * 获取天猫评论URL
 * @param unknown $id
 * @return string
 */
function get_tmall_comment_url($id){
    $comment_list_url = 'http://rate.tmall.com/list_detail_rate.htm?itemId='.$id.'&spuId=¤tPage=1&sellerId=&order=0&forShop=1&callback=?';
    return $comment_list_url;
}
/**
 * 根据商品URL获取评论
 * @param string $url 淘宝或天猫商品链接地址
 * @param int $maxPage 采集最大页数,设置为NULL则获取全部评论
 * @return multitype:multitype:NULL unknown  multitype:unknown
 */
function get_comment_list($url, $maxPage=5) {
    // 数据集
    $data = array();
    // 评论总页数,初始共一页,程序自动获取
    $lastPage = 1;
    if (strpos($url, 'tmall.com') === false) {
        // 淘宝
        $id = get_taobao_item_id($url);
        $url = get_taobao_comment_url($id);
        for ($i=1; $i<=$lastPage; $i++) {
            $url = preg_replace('/PageNum=(\d+)&/','PageNum='.$i.'&', $url);
            //抓取评论
            $product_comment_list = download_page($url);
            $product_comment_list = iconv('gbk','utf-8//IGNORE', $product_comment_list);
            preg_match('#\((.*?)\)#U', $product_comment_list, $comment_list_matchs);
            $content = json_decode($comment_list_matchs[1], true);
            $lastPage = $content['maxPage'];
            // 重组数据
            foreach ($content['comments'] as $item) {
                $rate = array();
                $rate['username'] = $item['user']['nick'];
                $rate['content'] = $item['content'];
                $rate['sku'] = $item['auction']['sku'];
                $rate['datetime'] = $item['date'];
                $data[] = $rate;
            }
            // 超出指定页,退出。防止获取全部评论
            if ($maxPage && ($i >= $maxPage)) {
                break;
            }
        }
    } else {
        // 天猫
        $id = get_taobao_item_id($url);
        $url = get_tmall_comment_url($id);
        for ($i=1; $i<=$lastPage; $i++) {
            $url = preg_replace('/currentPage=(\d+)&/','currentPage='.$i.'&', $url);
            //抓取评论
            $product_comment_list = download_page($url);
            $product_comment_list = iconv('gbk','utf-8//IGNORE', $product_comment_list);
            preg_match('#\((.*?)\)#U', $product_comment_list, $comment_list_matchs);
            $content = json_decode($comment_list_matchs[1], true);
            $content = $content['rateDetail'];
            $lastPage = $content['paginator']['lastPage'];
            foreach ($content['rateList'] as $item) {
                $rate = array();
                $rate['username'] = $item['displayUserNick'];
                $rate['content'] = $item['rateContent'];
                $rate['sku'] = $item['auctionSku'];
                $rate['datetime'] = $item['rateDate'];
                $data[] = $rate;
            }
            // 超出指定页,退出。防止获取全部评论
            if ($maxPage && ($i >= $maxPage)) {
                break;
            }
        }
    }
    return $data;
}
// 获取淘宝评论测试
$url = 'http://item.taobao.com/item.htm?id=14150972514';
$data = get_comment_list($url);
var_dump($data);
// 获取天猫评论测试
$url = 'http://detail.tmall.com/item.htm?id=39969082707';
$data = get_comment_list($url);
var_dump($data);
登录后复制

原文地址:php curl 通过淘宝链接抓取商品评论, 感谢原作者分享。

09-16 12:14