zoukankan      html  css  js  c++  java
  • 利用PHP从淘宝采集评论和成交数据

    如果不想通过淘宝开放平台API获取数据,那么另外一个很好的办法就是采集了。一般来说,采集一个网页上的内容,只需要用CURL获取源代码,然后用正则表达式取出需要的内容就可以,不过如果这样载入一个淘宝的页面,会

    如 果不想通过淘宝开放平台API获取数据,那么另外一个很好的办法就是采集了。一般来说,采集一个网页上的内容,只需要用CURL获取源代码,然后用正则表 达式取出需要的内容就可以,不过如果这样载入一个淘宝的页面,会发现根本没有评论和成交数据,直接查看源代码可以看到评论的是空的。分析页面后发现,淘宝 的评论并不是直接输出在页面中,而是在点击评论和成交的时候,才会跨域获取数据,并用脚本解析显示。

    这样的处理方式使得 CURL页面的方式不好使用了,但是实际上获得数据反而更容易:使用CURL还必须考虑装修模板的问题,通用性并不好,而跨域获取的数据多数情况下是一个 标准的格式,通过抓取数据包最后发现淘宝的评论数据是从http://rate.taobao.com/feedRateList.htm?使用URL直 接GET方式过来的,并且是标准的JSON格式。 

    数据地址:

    1. http://rate.taobao.com/feedRateList.htm?callback=jsonp_reviews_list&userNumId=【掌柜的账号数字ID】&auctionNumId=【商品ID】&currentPageNum=【评论分页页码】
    复制

    其他还有些参数可以不用。【掌柜的账号数字ID】抓包时可获取,商品ID在宝贝页面链接中的id值就是。

    第 二步:解析数值。因为淘宝的页面编码是GBK的,而PHP在处理GBK编码的JSON文件时,对其中的中文处理是有问题的,会替换成空值,所以最后 JSON数据decode出来的是一个NULL,解决办法是将GBK编码转换为UTF-8。如果你的网站是UTF-8的,那么把从淘宝抓来的JSON直接 转成UTF-8然后decode就可用了,如果是GBK的,则转好后再转回GBK就可以。下面以http://item.taobao.com /item.htm?id=20972699241为例,UTF-8页面的处理方法:

    1. $ch = curl_init();//初始化,创建句柄
    2. curl_setopt($ch, CURLOPT_URL, "http://rate.taobao.com/feedRateList.htm?callback=jsonp_reviews_list&userNumId=1048567622&auctionNumId=20972699241&currentPageNum=1");//设置细节参数
    3. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    4. curl_setopt($ch, CURLOPT_HEADER, 0);
    5. $str = curl_exec($ch);//获取内容
    6. $str = mb_convert_encoding($str,'UTF-8','GBK');//转换编码
    7. $str = str_replace('jsonp_reviews_list(','',$str);//去掉多余的字符串
    8. $str = str_replace(')','',$str);
    9. $data = json_decode($str,TRUE);//得到数据了,第二个参数是转化为数组
    10. print_r($data)//输出页面查看
    复制

    注意几个细节:
    1、从淘宝抓来的JSON是GBK编码的;
    2、PHP的json_decode()函数处理GBK编码的中文数据是有问题的,需要转换UTF-8后处理;
    3、iconv()和mb_convert_encoding()函数也各有优劣和BUG,注意处理。
    4、curl函数的使用;
    5、如果要采集不止一页评论,总的页面数可以在返回值中的maxpage获取。

    购买记录数据的获取方法大同小异,天猫的评论获取地址也有所不同,不过方法都是一样的。

  • 相关阅读:
    7,C++ public, protected, private 继承的区别
    6,又一道经典的微软题
    5,一道经典的微软程序题
    33. Search in Rotated Sorted Array
    198,House Robber
    4,二维数组中指针的问题
    剑指offer——stack与queue的互相实现
    3,C语言文件读写
    2,虚函数
    剑指offer——已知二叉树的先序和中序排列,重构二叉树
  • 原文地址:https://www.cnblogs.com/ZDPPU/p/5823840.html
Copyright © 2011-2022 走看看