Heim  >  Artikel  >  Backend-Entwicklung  >  Verwenden Sie PHP, um Produktdaten von Tmall und Taobao zu crawlen

Verwenden Sie PHP, um Produktdaten von Tmall und Taobao zu crawlen

不言
不言Original
2018-06-19 11:05:392597Durchsuche

Dieser Artikel stellt hauptsächlich die Methode zum Crawlen von Tmall- und Taobao-Produktdaten vor. Interessierte Freunde können darauf verweisen

Ich habe kürzlich eine Website erstellt, die Produktinformationen von Tmall und Taobao über die URL gecrawlt hat. Ich habe mir zuerst die mobile Webseite angesehen und festgestellt, dass ich nicht viel darüber wusste und es nicht tun konnte. Deshalb habe ich nur darüber nachgedacht, die Daten vom PC-Portal zu crawlen, aber beim Crawlen der URL werden keine Informationen zum Preis, zum Inventar usw. abgerufen. Nach sorgfältiger Untersuchung habe ich festgestellt, dass eine andere Schnittstelle asynchron angefordert wird Zum Abrufen der Daten ist ein Verweis erforderlich. Daher wird ein einfacher Crawler wie folgt geschrieben, der zum Crawlen der Produktvorschau und des Preises, des Inventars usw. der ersten Kategorie des Produkts verwendet wird.

2. Der zu implementierende Code

lautet wie folgt:

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, &#39;https://detailskip.taobao.com/service/getData/1/p1/item/detail/sib.htm?itemId=&#39;.$item_id.&#39;&sellerId=&#39;.$sellet_id.&#39;&modules=dynStock,qrcode,viewer,price,duty,xmpPromotion,delivery,upp,activity,fqg,zjys,amountRestriction,couponActivity,soldQuantity,originalPrice,tradeContract&callback=onSibRequestSuccess&#39;);
  $opt[CURLOPT_HEADER]=false;
  $opt[CURLOPT_CONNECTTIMEOUT]=15;
  $opt[CURLOPT_TIMEOUT]=300;
  $opt[CURLOPT_AUTOREFERER]=true;
  $opt[CURLOPT_USERAGENT]=&#39;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11&#39;;
  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(&#39;onSibRequestSuccess(&#39;,"",$out_put);
  $res=rtrim($res,&#39;);1&#39;);
  $result=json_decode($res,true);
  //查询出图片信息
  preg_match(&#39;|<ul id="J_UlThumb" class="tb-thumb tb-clearfix">(.*)</ul>|isU&#39;, $content, $match);
  preg_match_all(&#39;/<img src="(.*?)" \//&#39;, $match[1], $images);

  $myres[&#39;title&#39;]=str_replace(&#39;-淘宝网&#39;,&#39;&#39;,$title);

  $myres[&#39;price&#39;]=current($result[&#39;data&#39;][&#39;originalPrice&#39;]);

  $myres[&#39;act_price&#39;]=current($result[&#39;data&#39;][&#39;promotion&#39;][&#39;promoData&#39;]);

  $myres[&#39;stock&#39;]=$result[&#39;data&#39;][&#39;dynStock&#39;][&#39;stock&#39;];

  $myres[&#39;banners&#39;]=$images[1];
 }else{
  //匹配是否下架
  if(strpos($content,&#39;此宝贝已下架&#39;)!==false){
   return false;
  }
  $start=strpos($url,&#39;&id=&#39;);
  $item_id=substr($url,$start+4,12);
  if(!is_numeric($item_id)){
   $start=strpos($url,&#39;?id=&#39;);
   $end=strpos($url,&#39;&spm&#39;);
   $item_id=substr($url,$start+4,$end-$start-4);
  }
  preg_match("|<title>(.*)</title>|isU",$content,$match);
  $title=$match[1];
  $myurl=&#39;https://mdskip.taobao.com/core/initItemDetail.htm?cachedTimestamp=1500562177777&queryMemberRight=true&cartEnable=true&offlineShop=false&addressLevel=2&itemId=&#39;.$item_id.&#39;&tryBeforeBuy=false&isAreaSell=false&tmallBuySupport=true&isPurchaseMallPage=false&household=false&isForbidBuyItem=false&service3C=false&isRegionLevel=false&showShopProm=false&isSecKill=false&sellerPreview=false&isUseInventoryCenter=false&isApparel=true&callback=setMdskip&timestamp=1500562172109&isg=AiUlDZFWmP/sMgVurQSILU3Ytet/Zdis&isg2=Ajk51JIhRFqKzxmiNPP6dkYxSKXT7iySkzSTeVtu9WDf4ll0o5Y9yKdyEtHu&#39;;
  //价格库存信息
  $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]=&#39;Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11&#39;;
  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, &#39;UTF-8&#39;, &#39;UTF-8,GBK,GB2312,BIG5&#39; );
  $res=str_replace(&#39;setMdskip&#39;,"",$res);
  $res=str_replace(&#39;(&#39;,"",$res);
  $res=str_replace(&#39;)&#39;,"",$res);
  $result=json_decode($res,true);
  $nowk="";
  $nowstore="";
  foreach($result[&#39;defaultModel&#39;][&#39;inventoryDO&#39;][&#39;skuQuantity&#39;] as $k=>$val){
   $nowk=$k;
   $nowstore=$val;
   break;
  }

  $myres[&#39;title&#39;]=str_replace(&#39;-tmall.com天猫&#39;,&#39;&#39;,$title);

  $myres[&#39;price&#39;]=$result[&#39;defaultModel&#39;][&#39;itemPriceResultDO&#39;][&#39;priceInfo&#39;][$nowk][&#39;price&#39;];

  $myres[&#39;act_price&#39;]=isset($result[&#39;defaultModel&#39;][&#39;itemPriceResultDO&#39;][&#39;priceInfo&#39;][$nowk][&#39;suggestivePromotionList&#39;])?$result[&#39;defaultModel&#39;][&#39;itemPriceResultDO&#39;][&#39;priceInfo&#39;][$nowk][&#39;suggestivePromotionList&#39;]:$result[&#39;defaultModel&#39;][&#39;itemPriceResultDO&#39;][&#39;priceInfo&#39;][$nowk];

  $myres[&#39;stock&#39;]=$result[&#39;defaultModel&#39;][&#39;inventoryDO&#39;][&#39;totalQuantity&#39;]?$result[&#39;defaultModel&#39;][&#39;inventoryDO&#39;][&#39;totalQuantity&#39;]:$nowstore[&#39;quantity&#39;];
  //查询出图片信息
  preg_match(&#39;|<ul id="J_UlThumb" class="tb-thumb tm-clear">(.*)</ul>|isU&#39;,$content, $match);
  preg_match_all(&#39;/<img src="(.*?)" \//&#39;,$match[1],$images);
  $myres[&#39;banners&#39;]=$images[1];
 }
 return $myres;
}

Der obige Code verwendet die PHPQuery-Bibliothek, aber es ist eigentlich nutzlos. Die spezifischen gecrawlten Daten können über Parameter angezeigt werden. Die Methode unterscheidet nicht zwischen Taobao- und Tmall-Links, aber die Voraussetzung ist, dass es sich um einen PC-seitigen Link handelt. Darüber hinaus ist das reguläre Schreiben nicht standardisiert, sodass Sie den regulären Ausdruck selbst umschreiben können, um ihn an die Daten anzupassen.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Über PHP Verschlüsselungsprobleme während der Entwicklung


So verwenden Sie PHP, um eine Seitenregistrierung und -prüfung zu erreichen


Das obige ist der detaillierte Inhalt vonVerwenden Sie PHP, um Produktdaten von Tmall und Taobao zu crawlen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn