PHP采集淘宝商品.docx
- 文档编号:10499394
- 上传时间:2023-02-14
- 格式:DOCX
- 页数:8
- 大小:16.87KB
PHP采集淘宝商品.docx
《PHP采集淘宝商品.docx》由会员分享,可在线阅读,更多相关《PHP采集淘宝商品.docx(8页珍藏版)》请在冰豆网上搜索。
PHP采集淘宝商品
PHP采集淘宝商品
PHP采集淘宝商品-风飘无痕
时间2014-03-2017:
52:
00
博客园-所有随笔区
原文
1.通过PHP程序更新所采集淘宝商品的价格以及是否停售
数据表:
CREATETABLE`goods`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`type`varchar(30)CHARACTERSETutf8COLLATEutf8_general_ciNULLDEFAULT'',
`keyid`varchar(60)CHARACTERSETutf8COLLATEutf8_general_ciNULLDEFAULT'',
`shop_id`int(11)NULLDEFAULT0,
`cid`smallint(6)NULLDEFAULT0,
`img_id`int(11)NULLDEFAULT0,
`imgs`varchar(255)CHARACTERSETutf8COLLATEutf8_general_ciNULLDEFAULTNULL,
`name`varchar(255)CHARACTERSETutf8COLLATEutf8_general_ciNULLDEFAULT'',
`url`varchar(255)CHARACTERSETutf8COLLATEutf8_general_ciNULLDEFAULT'',
`taoke_url`varchar(255)CHARACTERSETutf8COLLATEutf8_general_ciNULLDEFAULT'',
`price`decimal(10,2)NULLDEFAULT0.00,
`sellerid`int(11)UNSIGNEDNULLDEFAULTNULL,
`is_off_sale`tinyint
(1)UNSIGNEDNULLDEFAULT0,
`delist_time`int(11)NULLDEFAULT0,
`create_time`int(11)NULLDEFAULT0,
`ctime`int(11)NULLDEFAULTNULL,
`cache_data`textCHARACTERSETutf8COLLATEutf8_general_ciNULL,
`create_day`int(11)NULLDEFAULT0,
`commission`decimal(10,2)NULLDEFAULT0.00,
`comment_collect_time`int(11)NULLDEFAULT0,
`color`smallint(6)NULLDEFAULT0,
`content`textCHARACTERSETutf8COLLATEutf8_general_ciNULL,
`taobao_desc_url`varchar(255)CHARACTERSETutf8COLLATEutf8_general_ciNOTNULLDEFAULT'\'\''COMMENT'淘宝商品详细介绍地址',
PRIMARYKEY(`id`),
UNIQUEINDEX`keyid`(`keyid`)USINGBTREE,
INDEX`shop_id`(`shop_id`)USINGBTREE,
INDEX`delist_time`(`delist_time`)USINGBTREE,
INDEX`cid`(`cid`)USINGBTREE,
INDEX`create_day`(`create_day`)USINGBTREE
)
ENGINE=InnoDB
DEFAULTCHARACTERSET=utf8COLLATE=utf8_general_ci
AUTO_INCREMENT=40614
ROW_FORMAT=COMPACT
;
PHP文件:
<?
php
$con=mysql_connect('localhost','root','');
mysql_select_db("fanwe",$con);
$start_time=microtime
(1);
$sql="SELECTid,price,urlFROMs_goodsWHEREurl!
=''ANDkeyidlike'taobao%'ANDis_off_sale=0ORDERBYidLIMIT10";//更新前10个
$rs=mysql_query($sql);
echo'COUNT:
'.mysql_num_rows($rs)."\n";
$error=array();
$i=0;
$h=fopen('d:
/mydomain/updateprice.log','a+');
while($r=mysql_fetch_array($rs)){
$s=microtime
(1);
echo$i++.':
'.$r['id']."\t";
$price=getPrice($r['url']);
$t=microtime
(1)-$s;
echo(ceil($t*1000)/1000)."\t";
if($price===false)echo'FALSE';
elseif(bccomp($price,$r['price'])==0)echo'EQUAL';
else{
echo"UPDATE\t".$r['price']."\t".$price;
mysql_query("UPDATEs_goodsSETprice=".$price."WHEREid=".$r['id']);
fputcsv($h,array(date('Y-m-dH:
i:
s'),$r['id'],$r['price'],$price));
}
echo"\n";
}
fclose($h);
echo'COUNT:
'.mysql_num_rows($rs)."\tTIME:
".ceil(microtime
(1)-$start_time);
functiongetPrice($url,$time=1){
$des_url='';
$ch=curl_init();
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0(WindowsNT6.2;WOW64;rv:
26.0)Gecko/20100101Firefox/26.0');
curl_setopt($ch,CURLOPT_REFERER,'
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//设置输出方式,0为自动输出返回的内容,1为返回输出的内容,但不自动输出.
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30);//timeoutonconnect
curl_setopt($ch,CURLOPT_TIMEOUT,30);//timeoutonresponse
curl_setopt($ch,CURLOPT_HEADER,1);//是否输出头信息,0为不输出,非零则输出
curl_setopt($ch,CURLOPT_MAXREDIRS,10);
curl_setopt($ch,CURLOPT_URL,$url);
$content=curl_exec($ch);
curl_close($ch);
if(preg_match("/'reservePrice'\s*:
\s*'([\d\.]+?
)',/",$content,$price)){
$price=(float)$price[1];
}elseif(preg_match('/price:
([\d\.]+?
),/',$content,$price)){
$price=(float)$price[1];
}
if(!
$price&&preg_match('/tmall/',$url)){//天猫促销价addLiuYang2014-02-2415:
10
preg_match('/id=(\d+)+/',$url,$temp);
$url2="
$ch=curl_init();
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0(Windows;U;WindowsNT5.1;rv:
1.7.3)Gecko/20041001Firefox/0.10.1");
curl_setopt($ch,CURLOPT_URL,$url2);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch,CURLOPT_ENCODING,"");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_REFERER,'');
curl_setopt($ch,CURLOPT_AUTOREFERER,true);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($ch,CURLOPT_TIMEOUT,10);
curl_setopt($ch,CURLOPT_MAXREDIRS,10);
$price_content=curl_exec($ch);
$response=curl_getinfo($ch);
curl_close($ch);
$price_content=iconv('gbk','utf-8',preg_replace('/(\d{10,}):
/','"${1}":
',$price_content)),true);
$priceinfo=$price_content['defaultModel']['itemPriceResultDO']['priceInfo'];
$price=array();
foreach($priceinfoas$v){
$price[]=$v['price'];
if(is_array($v['promotionList'])){
foreach($v['promotionList']as$v2){
$price[]=$v2['extraPromPrice']?
$v2['extraPromPrice']:
$v2['price'];
}
}
if(is_array($v['suggestivePromotionList'])){
foreach($v['suggestivePromotionList']as$v2){
$price[]=$v2['extraPromPrice']?
$v2['extraPromPrice']:
$v2['price'];
}
}
}
$price=count($price)>0?
min($price):
false;
}
if($price)return$price;
elseif($time==1)returngetPrice($url,2);
elsereturnfalse;
}
?
>
执行方式如果采用apache或nginx等服务器,会因为各个服务器的最大响应时间而受影响.如果只更新10个那可能会完成,如果是上百个肯定是不能完全更新的.
可以采用PHP命令的等式来执行.
D:
\mydomain>phpupdateprice.php
COUNT:
10
0:
365990.232EQUAL
1:
366001.091EQUAL
2:
366011.039EQUAL
3:
366031.08EQUAL
4:
366040.984EQUAL
5:
366050.972EQUAL
6:
366101.019EQUAL
7:
366110.971EQUAL
8:
366121.048EQUAL
9:
366131.149EQUAL
COUNT:
10TIME:
10
如此既清晰又明了,而且会一直执行到程序完成,不会担心服务器没有响应.
上面是在windows下面执行,如果输入php提示:
'php'不是内部或外部命令,也不是可运行的程序或批处理文件。
就必须把php.exe所在的地址补全
D:
\mydomain>D:
\AppServ\php5\phpupdatePrice.php
或者把php.exe所在的地址加入全局变量
此方法在Linux下同样有用只用修改对应的地址即可,在linux中php命令是可以直接用的.
[root@liu~]#phpupdatePrice.php
此方法有一个缺点,就是执行效率问题.一个商品采集平均需要0.8秒.那10000个商品采集完需要2个半小时.
如想继续了解,请看下篇.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PHP 采集 淘宝 商品