Heim  >  Artikel  >  Backend-Entwicklung  >  So crawlen Sie Tmall- und Taobao-Produktdaten in PHP

So crawlen Sie Tmall- und Taobao-Produktdaten in PHP

小云云
小云云Original
2018-02-24 09:17:212869Durchsuche

1. Ideen

Ich habe kürzlich eine Website erstellt, die die Produktinformationen von Tmall und Taobao gecrawlt hat Ich weiß zu viel darüber und kann es nicht tun, daher habe ich darüber nachgedacht, die Daten vom PC-Portal zu crawlen, um die Daten zu erhalten. Nach sorgfältiger Untersuchung wurden jedoch keine Informationen zu Preis, Inventar usw. abgerufen. Ich habe festgestellt, dass eine andere Schnittstelle asynchron angefordert wurde, die Schnittstelle jedoch erforderlich ist. Daten können nur über refer abgerufen werden. Daher habe ich einen einfachen Crawler wie folgt geschrieben, um die Produktvorschau und den Preis, den Lagerbestand usw. der ersten Kategorie zu crawlen Produkt.

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 ist jedoch nutzlos. Verwenden Sie einfach Curl. Die spezifischen gecrawlten Daten können nicht zwischen Taobao- und Tmall-Links unterschieden werden. Voraussetzung ist jedoch, dass es sich um einen PC handelt -Side-Link Darüber hinaus sind die regulären Ausdrücke nicht standardisiert, sodass Sie den regulären Ausdruck selbst umschreiben können, um ihn an die Daten anzupassen.

Verwandte Empfehlungen:

Speichern Sie die gecrawlten Daten in MySQL

Verwenden Sie einen Crawler, um Daten zu Zhihu-Inhalten zu crawlen. Warum Treten bei Ihnen 403-Probleme auf?

Weitergabe der Python-Crawling-Methode von Anjuke-Gebrauchtwohnungs-Website-Daten

Das obige ist der detaillierte Inhalt vonSo crawlen Sie Tmall- und Taobao-Produktdaten in PHP. 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