一、思路
最近做了一個網(wǎng)站用到了從網(wǎng)址爬取天貓和淘寶的商品信息,首先看了下手機(jī)端的網(wǎng)頁發(fā)現(xiàn)用的react,不太了解沒法搞,所以就考慮從PC入口爬取數(shù)據(jù),但是當(dāng)爬取URL獲取數(shù)據(jù)時并沒有獲取價格,庫存等的信息,仔細(xì)研究了下發(fā)現(xiàn)是異步請求了另一個接口,但是接口要使用refer才能獲取數(shù)據(jù),于是就通過以下方式寫了一個簡單的爬蟲,用于爬取商品預(yù)覽圖和商品的第一個分類的價格、庫存等。
二、實(shí)現(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, 'https://detailskip.taobao.com/service/getData/1/p1/item/detail/sib.htm?itemId='.$item_id.'sellerId='.$sellet_id.'modules=dynStock,qrcode,viewer,price,duty,xmpPromotion,delivery,upp,activity,fqg,zjys,amountRestriction,couponActivity,soldQuantity,originalPrice,tradeContractcallback=onSibRequestSuccess'); $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='https://mdskip.taobao.com/core/initItemDetail.htm?cachedTimestamp=1500562177777queryMemberRight=truecartEnable=trueofflineShop=falseaddressLevel=2itemId='.$item_id.'tryBeforeBuy=falseisAreaSell=falsetmallBuySupport=trueisPurchaseMallPage=falsehousehold=falseisForbidBuyItem=falseservice3C=falseisRegionLevel=falseshowShopProm=falseisSecKill=falsesellerPreview=falseisUseInventoryCenter=falseisApparel=truecallback=setMdskiptimestamp=1500562172109isg=AiUlDZFWmP/sMgVurQSILU3Ytet/Zdisisg2=Ajk51JIhRFqKzxmiNPP6dkYxSKXT7iySkzSTeVtu9WDf4ll0o5Y9yKdyEtHu'; //價格庫存信息 $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的庫,但是其實(shí)沒啥用,直接用Curl就行,具體爬取的數(shù)據(jù)可以穿參查看結(jié)果,方法不區(qū)分淘寶和天貓鏈接,但是前提是必須是PC端鏈接,另外正則寫的不規(guī)范,所以可以自己重寫正則來匹配數(shù)據(jù)。
更多內(nèi)容請參考專題《python爬取功能匯總》進(jìn)行學(xué)習(xí)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
標(biāo)簽:興安盟 株洲 濱州 南京 白酒營銷 南昌 太原 曲靖
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《php爬取天貓和淘寶商品數(shù)據(jù)》,本文關(guān)鍵詞 php,爬取天,貓,和,淘寶,商品,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。