1. 程式人生 > >利用PHP從淘寶採集評論和成交資料

利用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頁面的處理方法:

複製
$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獲取。

購買記錄資料的獲取方法大同小異,天貓的評論獲取地址也有所不同,不過方法都是一樣的。