這篇文章主要介紹了php如何爬取天貓和淘寶商品數(shù)據(jù),具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
一、思路
最近做了一個網(wǎng)站用到了從網(wǎng)址爬取天貓和淘寶的商品信息,首先看了下手機端的網(wǎng)頁發(fā)現(xiàn)用的react,不太了解沒法搞,所以就考慮從PC入口爬取數(shù)據(jù),但是當(dāng)爬取URL獲取數(shù)據(jù)時并沒有獲取價格,庫存等的信息,仔細(xì)研究了下發(fā)現(xiàn)是異步請求了另一個接口,但是接口要使用refer才能獲取數(shù)據(jù),于是就通過以下方式寫了一個簡單的爬蟲,用于爬取商品預(yù)覽圖和商品的第一個分類的價格、庫存等。
二、實現(xiàn)
代碼如下:
function?crawlUrl($url){ import('PhpQuery.Curl'); ?$curl=new?\Curl(); ?$result?=?$curl->read($url); ?$content?=?mb_convert_encoding(?$result['content'],?'UTF-8',?'UTF-8,GBK,GB2312,BIG5'?); ?$myres=array(); ?if(strrpos($url,'taobao.com')!=false)?{ ??//匹配是否下架 ??if(strpos($content,'此寶貝已下架')!==false){ ???return?false; ??} ??preg_match("|itemId???:?'(.*)'|isU",?$content,?$match); ??$item_id=$match[1]; ??preg_match("|sellerId???:?'(.*)'|isU",?$content,?$match); ??$sellet_id=$match[1]; ??preg_match("|<title>(.*)</title>|isU",$content,$match); ??$title=$match[1]; ??//價格庫存信息 ??$ch?=?curl_init(); ??curl_setopt?($ch,?CURLOPT_URL,?'/tupian/20230522/sib.htm ??$opt[CURLOPT_HEADER]=false; ??$opt[CURLOPT_CONNECTTIMEOUT]=15; ??$opt[CURLOPT_TIMEOUT]=300; ??$opt[CURLOPT_AUTOREFERER]=true; ??$opt[CURLOPT_USERAGENT]='Mozilla/5.0?(Windows?NT?6.1)?AppleWebKit/536.11?(KHTML,?like?Gecko)?Chrome/20.0.1132.47?Safari/536.11'; ??curl_setopt_array($ch,$opt); ??curl_setopt?($ch,?CURLOPT_RETURNTRANSFER,?1); ??curl_setopt?($ch,CURLOPT_REFERER,$url); ??curl_setopt($ch,?CURLOPT_SSL_VERIFYPEER,?false); ??$out_put=curl_exec?($ch); ??curl_close?($ch); ??$res=str_replace('onSibRequestSuccess(',"",$out_put); ??$res=rtrim($res,');1'); ??$result=json_decode($res,true); ??//查詢出圖片信息 ??preg_match('|<ul?id="J_UlThumb"?class="tb-thumb?tb-clearfix">(.*)</ul>|isU',?$content,?$match); ??preg_match_all('/<img?data-src="(.*?)"?\//',?$match[1],?$images); ??$myres['title']=str_replace('-淘寶網(wǎng)','',$title); ??$myres['price']=current($result['data']['originalPrice']); ??$myres['act_price']=current($result['data']['promotion']['promoData']); ??$myres['stock']=$result['data']['dynStock']['stock']; ??$myres['banners']=$images[1]; ?}else{ ??//匹配是否下架 ??if(strpos($content,'此寶貝已下架')!==false){ ???return?false; ??} ??$start=strpos($url,'&id='); ??$item_id=substr($url,$start+4,12); ??if(!is_numeric($item_id)){ ???$start=strpos($url,'?id='); ???$end=strpos($url,'&spm'); ???$item_id=substr($url,$start+4,$end-$start-4); ??} ??preg_match("|<title>(.*)</title>|isU",$content,$match); ??$title=$match[1]; ??$myurl='/tupian/20230522/initItemDetail.htm ??//價格庫存信息 ??$ch?=?curl_init(); ??curl_setopt?($ch,?CURLOPT_URL,?$myurl); ??$opt[CURLOPT_HEADER]=false; ??$opt[CURLOPT_CONNECTTIMEOUT]=15; ??$opt[CURLOPT_TIMEOUT]=300; ??$opt[CURLOPT_AUTOREFERER]=true; ??$opt[CURLOPT_USERAGENT]='Mozilla/5.0?(Windows?NT?6.1)?AppleWebKit/536.11?(KHTML,?like?Gecko)?Chrome/20.0.1132.47?Safari/536.11'; ??curl_setopt_array($ch,$opt); ??curl_setopt?($ch,?CURLOPT_RETURNTRANSFER,?1); ??curl_setopt?($ch,CURLOPT_REFERER,$url); ??curl_setopt($ch,?CURLOPT_SSL_VERIFYPEER,?false); ??$out_put=curl_exec?($ch); ??curl_close?($ch); ??$res?=?mb_convert_encoding(?$out_put,?'UTF-8',?'UTF-8,GBK,GB2312,BIG5'?); ??$res=str_replace('setMdskip',"",$res); ??$res=str_replace('(',"",$res); ??$res=str_replace(')',"",$res); ??$result=json_decode($res,true); ??$nowk=""; ??$nowstore=""; ??foreach($result['defaultModel']['inventoryDO']['skuQuantity']?as?$k=>$val){ ???$nowk=$k; ???$nowstore=$val; ???break; ??} ??$myres['title']=str_replace('-tmall.com天貓','',$title); ??$myres['price']=$result['defaultModel']['itemPriceResultDO']['priceInfo'][$nowk]['price']; ??$myres['act_price']=isset($result['defaultModel']['itemPriceResultDO']['priceInfo'][$nowk]['suggestivePromotionList'])?$result['defaultModel']['itemPriceResultDO']['priceInfo'][$nowk]['suggestivePromotionList']:$result['defaultModel']['itemPriceResultDO']['priceInfo'][$nowk]; ??$myres['stock']=$result['defaultModel']['inventoryDO']['totalQuantity']?$result['defaultModel']['inventoryDO']['totalQuantity']:$nowstore['quantity']; ??//查詢出圖片信息 ??preg_match('|<ul?id="J_UlThumb"?class="tb-thumb?tm-clear">(.*)</ul>|isU',$content,?$match); ??preg_match_all('/<img?src="(.*?)"?\//',$match[1],$images); ??$myres['banners']=$images[1]; ?} ?return?$myres; }
上述代碼用到phpquery的庫,但是其實沒啥用,直接用Curl就行,具體爬取的數(shù)據(jù)可以穿參查看結(jié)果,方法不區(qū)分淘寶和天貓鏈接,但是前提是必須是PC端鏈接,另外正則寫的不規(guī)范,所以可以自己重寫正則來匹配數(shù)據(jù)。
封裝后的接口名稱:item_get?
響應(yīng)字段表-試用API數(shù)據(jù)
名稱 | 類型 | 必須 | 示例值 | 描述 |
---|---|---|---|---|
item |
item[] | 1 | 寶貝詳情數(shù)據(jù) | |
num_iid |
Bigint | 1 | 520813250866 | 寶貝ID |
title |
String | 1 | 三刃木折疊刀過安檢創(chuàng)意迷你鑰匙扣鑰匙刀軍刀隨身多功能小刀包郵 | 寶貝標(biāo)題 |
desc_short |
String | 0 | 商品簡介 | |
promotion_price |
Int | 0 | 優(yōu)惠價 | |
price |
Float | 1 | 25.8 | 價格 |
total_price |
Float | 0 | 0 | |
suggestive_price |
Float | 0 | 0 | |
orginal_price |
String | 0 | 25.80 | 原價 |
nick |
String | 0 | 歡樂購客棧 | 掌柜昵稱 |
num |
Int | 0 | 3836 | 庫存 |
min_num |
Int | 0 | 0 | 最小購買數(shù) |
detail_url |
String | 0 | http://item.taobao.com/item.htm?id=520813250866 | 寶貝鏈接 |
pic_url |
String | 1 | //gd2.alicdn.com/imgextra/i4/2596264565/TB2p30elFXXXXXQXpXXXXXXXXXX_!!2596264565.jpg | 寶貝圖片 |
brand |
String | 0 | 三刃木 | 品牌名稱 |
brandId |
Int | 0 | 8879363 | 品牌ID |
rootCatId |
Int | 0 | 50013886 | 頂級分類ID |
cid |
Int | 1 | 50014822 | |
crumbs |
Mix | 0 | [] | 導(dǎo)航菜單 |
created_time |
String | 0 | ||
modified_time |
String | 0 | ||
delist_time |
String | 0 | ||
desc |
String | 0 | 商品詳情 | |
desc_img |
Mix | 0 | [] | 商品詳情圖片 |
item_imgs |
Mix | 0 | item_imgs[] | 商品圖片 |
item_weight |
String | 0 | ||
item_size |
String | 0 | ||
location |
String | 0 | 發(fā)貨地 | |
express_fee |
Float | 0 | 0.00 | 快遞費用 |
ems_fee |
Float | 0 | EMS費用 | |
post_fee |
Float | 0 | 物流費用 | |
shipping_to |
String | 0 | 發(fā)貨至 | |
has_discount |
Boolean | 0 | false | 是否有優(yōu)惠 |
video |
video[] | 0 | 商品視頻 | |
is_virtual |
String | 0 | ||
is_promotion |
Boolean | 0 | false | 是否促銷 |
props_name |
String | 0 | 1627207:1347647754:顏色分類:長方形帶開瓶器+送工具刀卡+鏈子;1627207:1347647753:顏色分類:橢圓形帶開瓶器+送工具刀卡+鏈子; | 商品屬性名。格式為pid1:vid1:name1:value1;pid1:vid2:name2:value2。 |
prop_imgs |
prop_imgs[] | 0 | 商品屬性圖片列表 | |
property_alias |
String | 0 | 20509:9974422:36;1627207:28326:紅色;20509:9975710:38;1627207:28326:紅色;20509:9981357:40;1627207:28326:紅色 | 銷售屬性值別名。格式為pid1:vid1:alias1;pid1:vid2:alia2。 |
props |
Mix | 0 | [{ "name": "產(chǎn)地","value": "中國" }] | 商品屬性 |
total_sold |
Int | 0 | ||
skus |
skus[] | 0 | 商品規(guī)格信息列表 | |
seller_id |
Int | 0 | 2844096782 | 賣家ID |
sales |
Int | 0 | 138 | 銷量 |
shop_id |
Int | 0 | 151372205 | 店鋪ID |
props_list |
Mix | 0 | {20509:9974422: 尺碼:36} | 商品屬性 |
seller_info |
seller_info[] | 1 | 賣家信息 | |
tmall |
Boolean | 0 | false | 是否天貓 |
error |
String | 0 | 錯誤信息 | |
warning |
String | 0 | 警告信息 | |
url_log |
Mix | 0 | [] | |
favcount |
Int | 0 | 0 | |
fanscount |
Int | 0 | 0 | |
method |
String | 0 | item_tmall:pget_item | |
promo_type |
String | 0 | ||
props_img |
Mix | 0 | 1627207:28326": "http://img.alicdn.com/imgextra/i2/2844096782/O1CN01VrjpXt1zyCc9DvERE_!!2844096782.jpg | 屬性圖片 |
shop_item文章來源:http://www.zghlxwxcb.cn/news/detail-636118.html |
Mix | 0 | [] | |
relate_items文章來源地址http://www.zghlxwxcb.cn/news/detail-636118.html |
Mix | 0 | [] |
到了這里,關(guān)于php如何爬取天貓和淘寶商品數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!