How to crawl Tmall and Taobao product data in PHP

小云云
Release: 2023-03-20 11:46:01
Original
2835 people have browsed it

1. Ideas

I recently made a website that crawled product information from Tmall and Taobao from the URL. First, I looked at the mobile web page and found that react was used. I know too much about it and can’t do it, so I considered crawling the data from the PC portal. However, when crawling the URL to obtain the data, the price, inventory, etc. information was not obtained. After careful study, I found that another interface was requested asynchronously, but the interface required Data can only be obtained using refer, so I wrote a simple crawler in the following way to crawl the product preview and the price, inventory, etc. of the first category of the product.

2. The code to implement

is as follows:


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;
}
Copy after login

The above code uses the phpquery library, but in fact It’s useless. Just use Curl. The specific crawled data can be viewed through parameters. The method does not distinguish between Taobao and Tmall links, but the prerequisite is that it must be a PC-side link. In addition, the regex is not standardized, so you can rewrite it yourself. Regular to match data.

Related recommendations:

Save the crawled data into mysql

Use a crawler to crawl data on Zhihu content. Why do you encounter 403 problems?

Sharing method of python crawling Anjuke second-hand housing website data

The above is the detailed content of How to crawl Tmall and Taobao product data in PHP. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!