如 果不想通過淘寶開放平台API獲取數據,那么另外一個很好的辦法就是采集了。一般來說,采集一個網頁上的內容,只需要用CURL獲取源代碼,然后用正則表 達式取出需要的內容就可以,不過如果這樣載入一個淘寶的頁面,會發現根本沒有評論和成交數據,直接查看源代碼可以看到評論的是空的。分析頁面后發現,淘寶 的評論並不是直接輸出在頁面中,而是在點擊評論和成交的時候,才會跨域獲取數據,並用腳本解析顯示。
這樣的處理方式使得 CURL頁面的方式不好使用了,但是實際上獲得數據反而更容易:使用CURL還必須考慮裝修模板的問題,通用性並不好,而跨域獲取的數據多數情況下是一個 標准的格式,通過抓取數據包最后發現淘寶的評論數據是從http://rate.taobao.com/feedRateList.htm?使用URL直 接GET方式過來的,並且是標准的JSON格式。
數據地址:
- http://rate.taobao.com/feedRateList.htm?callback=jsonp_reviews_list&userNumId=【掌櫃的賬號數字ID】&auctionNumId=【商品ID】¤tPageNum=【評論分頁頁碼】
其他還有些參數可以不用。【掌櫃的賬號數字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頁面的處理方法:
- $ch = curl_init();//初始化,創建句柄
- curl_setopt($ch, CURLOPT_URL, "http://rate.taobao.com/feedRateList.htm?callback=jsonp_reviews_list&userNumId=1048567622&auctionNumId=20972699241¤tPageNum=1");//設置細節參數
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_HEADER, 0);
- $str = curl_exec($ch);//獲取內容
- $str = mb_convert_encoding($str,'UTF-8','GBK');//轉換編碼
- $str = str_replace('jsonp_reviews_list(','',$str);//去掉多余的字符串
- $str = str_replace(')','',$str);
- $data = json_decode($str,TRUE);//得到數據了,第二個參數是轉化為數組
- print_r($data)//輸出頁面查看
注意幾個細節:
1、從淘寶抓來的JSON是GBK編碼的;
2、PHP的json_decode()函數處理GBK編碼的中文數據是有問題的,需要轉換UTF-8后處理;
3、iconv()和mb_convert_encoding()函數也各有優劣和BUG,注意處理。
4、curl函數的使用;
5、如果要采集不止一頁評論,總的頁面數可以在返回值中的maxpage獲取。
購買記錄數據的獲取方法大同小異,天貓的評論獲取地址也有所不同,不過方法都是一樣的。