PHP实现采集抓取淘宝网单个商品信息,本文是一种实现思路,使用file_get_contents函数实现,并给出了采集正则,需要的朋友可以参考下
调用淘宝的数据可以使用淘宝提供的api,如果只需调用淘宝商品图片名称等公开信息在自己网站上,使用php中的 file_get_contents 函数实现即可。
思路:
file_get_contents(url) 该函数根据 url 如 http://www..com 将该网页内容(源码)以字符串形式输出(一个整字符串),然后配合preg_match,preg_replace等这些正则表达式操作就可以实现获取该url特定div,img等信息了。当然前题是淘宝在单个商品页面的结构是固定的,如500图的img中id就是J_ImgBooth!
具体实现方法:(获取500图,名称,价格,属性及商品描述)
复制代码 代码如下:
$text=file_get_contents("http://item.taobao.com/item.htm?id=2380347279"); //将url地址上页面内容保存进$text
A.获取500图:
复制代码 代码如下:
preg_match('/<img[^>]*id="J_ImgBooth"[^r]*rc=\"([^"]*)\"[^>]*>/', $text, $img);
//运用正则抓取img标签中id为J_ImgBooth的img,$img[0]为该500图img标签,$img[1]为500图的图片地址;
B. 获取名称:
复制代码 代码如下:
preg_match('/<title>([^<>]*)<\/title>/', $text, $title);
//因为正文中的商品名称标签没有特殊class或id正则不好抓取,就抓<title>标签中的内容了,一般来说title中内容就是商品名称了(实际有些出入),$title[0]整个title标签 $title[1]标签中内容;
$title=iconv('GBK','UTF-8',$title);
//如果你的网站是utf8编码,那么需要进行一下转码(淘宝是gbk编码)
C.获取价格:
复制代码 代码如下:
preg_match('/<([a-z]+)[^i]*id=\"J_StrPrice\"[^>]*>([^<]*)<\/\\1>/is', $text, $price);
//同理获取id为J_StrPrice的标签内容$price[2], $price[0]是整个标签, $price[1]为strong标签名;
$price=floatval($price);//放入数据库估计还有转一下变量类型
D.获取属性:
这之前获取的内容都是在单标签中相对只需一个正则就可搞定,然而如果要获取如
复制代码 代码如下:
…
<div id=”xxx”>
…
<ul>
…
</ul>
<div>…
<div>…
</div>
</div>
</div>
…
这样特定div中有未知n个<>标签,获取该特定div将会非常的困难,搜了下网上,最接近的也只是”/<([a-z]+)[^>]*>([^<>]|(?R))*<\/\\1>/”这样使用递归抓取标签对,但是他不能抓特定标签,所以想要轻松抓取class=”attributes”的div我是没法办到了。但是淘宝网页有其特殊性,就是它的各个标签结构基本是固定的…<div>…</div>标签后面不是</div><div id=”description”>就是</div><div>,所以我们可以采用变通法达到获取属性标签内容的目的。
复制代码 代码如下:
preg_match('/<(div)[^c]*class=\"attributes\"[^>]*>.*<\/\\1>/is', $text, $text0);
//这个正则会抓取<div开始到整个页面最后一个</div>标签,当然我们属性标签就在这个的前面部分。
$text1=preg_replace("/<\/div>[^<]*<(div)[^c]*id=\"description\"[^>]*>.*<\/\\1>/is","",$text0);
//匹配到</div ><div id=”description”>至最后</div>然后用””代替(就是把匹配的删除了),所以如果attributes的div后面紧跟的是description那么我们已经达到目的了。
$attributes=preg_replace("/<\/div>[^<]*<(div)[^c]*class=\"box J_TBox\"[^>]*>.*<\/\\1>/is","",$text1);
//如果attributes后面紧跟box J_Tbox标签,那么我们还需要使用以上这步来剔除box J_Tbox标签,当然如果attributes的div后面紧跟的是description,这一步将不会匹配到任何即什么都不会做。
E.获取描述:
通过上面方法你肯定觉得淘宝页面上任何标签都可以很简单获取了吧(我之前也是这么想的),但是使用这个方法获取描述时得到的内容将会是“描述加载中”,是的,这个描述内容不是在源码中的,它是打开页面加载进一大堆js后,不知道从淘宝的哪个角落中加载进来的。
好吧,那么我们也可以模仿它放一些js进去。不知道哪些对加载描述有用?没事,全加载进来肯定没错。不知道需要放那些特定div上去有作用?抓一个源码,删掉一些div一步步试试看,你会发现“<div id=”detail”> </div>
复制代码 代码如下:
<div id="description">
<div id="J_DivItemDesc">描述加载中</div>
</div>
这几个div是加载描述所必须的,那么下面就是写代码了:
复制代码 代码如下:
preg_match_all('/<script[^>]*>[^<]*<\/script>/is', $text, $content);//页面js脚本
$content=$content[0];
$description='<div id="detail"> </div>
<div id="description">
<div id="J_DivItemDesc">描述加载中</div>
</div>';
foreach ($content as &$v){$description.=iconv('GBK','UTF-8',$v);};
//将这个$description放进页面,描述就会自动的加载进来了,当然多个商品描述在同一个页面也会只有一个描述会被加载的。
② 求一套最简单的ASP 购物网站源代码!!!
$留个Email或者带颤缓着你的问题来找我,
$如有进一步需求(查看我的详细信息),可以与我们取得联系,祝你顺利毕业.
----
此回复针对所有需要此源码的页面访问和围观者有效.
留一个Email或者带着你的题目来找我
----
项模液目金额1000元以上可提供语旦洞物音连线或面授支持
③ 要一个简单的PHP购物网站源码
购物商城类的开源代码,可以用ECShop免费开源网店系统或者ThinkPHPshop开源商城系统来做,当然网上也有很多主题模板可以用。
ECShop比较适合来做简单网店系统,个人或者企业做销售产品用;
④ c语言商品管理系统源代码,加注释
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define SIZE 300
typedef struct
{
char name[30];
int num;
char shang[10];
float price;
}record;
void DataInput(record *com, int *nptr);
int DataRead(record *com,int *nptr) ;
void DataStorage(record *com, int n); /*信息保存到文件*/
void DataFind( );
void DataDisPlay( );
void DataAdd( );
void DataDel( );
void DataStatistic( );
int main( )
{
record shangpin[SIZE];
int number=20; /*设商品数*/
char fn;
printf("\t~~~~~~商品管理系统~~~~~~");
while(1)
{
printf("\n\t\t1.商品信息录入\n"); /*显示主菜单*/
printf("\t\t2.商品信息显示\n");
printf("\t\t3.商品信息查找\n");
printf("\t\t4.商品信息添加\n");
printf("\t\t5.商品信息删除\n");
printf("\t\t6.商品信息统计\n");
printf("\t\t0.退出系统");
printf("\n\t~~~~~~~~~~~~~~~~\n");
printf("\t请输入你的一个选项(数字0-6): ");
fflush(stdin);
scanf("%c",&fn);
puts("\n");
switch(fn) /*切换到不同功能*/
{
case '1':
DataInput(shangpin, &number );
break; /*录入信息*/
case '2':DataDisPlay();
break; /*信息显示*/
case '3':
DataFind();
break; /*信息查找*/
case '4':
DataAdd( );
break; /*增加*/
case '5':
DataDel( );
break; /*删除*/
case '6':
DataStatistic();
break; /*信息统计*/
case '0':
return 0;
default:puts("\t\t没有这个项!返回主菜单!");
break;
}
printf("\n\t\t完毕!按任意键继续");
getch( );
puts("\n");
}
}
void DataInput(record *com, int *nptr) /*商品信息录入*/
{
int i = 0;
int n ; /*录入的总数*/
char YesOrNo; /*判断是否保存*/
char shangming[30]; /*商名*/
int haoma; /*商品号*/
char shangjia[10]; /*单价*/
float danjia;
printf("\t\t请输入商品个数:");
scanf("%d",&n);
*nptr = n; /*nptr返回商品个数*/
printf("\t\t现在开始录入这%d个商品信息:\n\n",n);
while(i<n)
{
printf("请输入商品的商品名:",i+1);
scanf("%s",&shangming);
printf("请输入商品的商品号:",i+1);
scanf("%d",&haoma);
printf("请输入商品的生产商:",i+1);
scanf("%s",&shangjia);
printf("请输入商品的单价 :",i+1);
scanf("%f",&danjia);
if(danjia>=0&&danjia<=1000) /*有效的单价才录入*/
{
strcpy(com[i].name,shangming);
com[i].num = haoma;
strcpy(com[i].shang,shangjia);
com[i].price = danjia;
i =i+1;
}
else
printf("输入的单价是一个无效的值!!!\n\n");
} /*结束while*/
printf("要保存您刚才录入的数据吗(Y/N)?"); /*选择保存*/
fflush(stdin);
scanf("%c",&YesOrNo);
if(YesOrNo=='y'||YesOrNo=='Y')
DataStorage(com,n);
else if(YesOrNo=='n'||YesOrNo=='N')
return;
else
printf("输入了不正确的选项\n");
return;
} /*结束函数*/
void DataFind( ) /*查找*/
{
void OnNumber(record *com,int n ); /*按商品号排序*/
int key; /*key为要查找的关键值*/
int low = 0; /*下限*/
int high ; /*上限*/
int mid ; /*中间值*/
char ans; /*选项*/
record com[SIZE];
int n;
if(DataRead(com,&n)==1) /*从文件中读取信息*/
{
OnNumber(com,n); /*先按商品号排序*/
high = n;
do
{
printf("\n\n\t\t请输入你要查找的商品号:");
scanf("%d",&key);
low = 0;high = n;
while (low <=high)
{
mid = (high + low)/2; /*折半查找法*/
if (key == com[mid].num )
{
printf("\n\t\t你要找的是第%d个商品\n",mid + 1);
printf("\t\t结果如下:\n\n");
printf("序号\t\t商品名\t 商品号\t生产商\t单价\n");
printf("%3d%17s%12d%12s%8.1f\n",mid+1,com[mid].name,com[mid].num,com[mid].shang,
com[mid].price);
break; /*如果找到则退出循环*/
}
if (key > com[mid].num ) low = mid + 1;
else high = mid - 1;
}
if (low > high)
printf("\t\t,没有找到这个价格!\n");
printf("\n\t\t还要继续查询吗(Y/N)?");
ans = getch( );
}
while (ans =='Y'||ans == 'y'); /*结束do....while*/
}
}
void DataStorage(record *com, int n) /*录入保存文件*/
{
int i;
FILE *comPtr;
char FileName[20];
printf("请输入您要保存的文件名:");
scanf("%s",FileName);
printf("正在将商品信息保存到文件,请稍候……\n");
if((comPtr=fopen(FileName,"w"))==NULL)
printf("没有该文件\n");
else
for(i=0 ; i<n ; i++)
fprintf(comPtr,"\n%17s%12d%12s%8.1f",com[i].name,com[i].num,com[i].shang,com[i].price);
fclose(comPtr);
}
int DataRead(record *com,int *nptr) /*读取文件*/
{
int i=0;
char datafile[20];
FILE *comPtr;
*nptr = 0;
printf("请输入文件名:");
scanf("%s",datafile);
if((comPtr = fopen(datafile,"r")) == NULL) /*打开文件*/
{
printf("没有该文件,请重新输入!\n");
return 0;
}
else
{
printf("正在读取商品单价,请稍候……\n");
while (!feof(comPtr))
{
fscanf(comPtr,"%s%d%s%f",&com[i].name,&com[i].num,&com[i].shang,&com[i].price);
i++;
}
*nptr = i;
printf("\n");
fclose(comPtr);
return 1;
}
}
void DataDisPlay()
{
void OnPrice(record *com,int n ); /*按单价*/
void OnNumber(record *com,int n ); /*按商品号*/
int N;
int i;
record com[300];
char YesNo; /*是否按顺序显示*/
char tp;
if(DataRead(com,&N)==1) /*从文件读取数据*/
{
printf("序号\t\t商品名\t 商品号\t生产商\t单价\n");
for(i=0;i<N;i++)
printf("%3d%17s%12d%12s%8.1f\n",i+1,com[i].name,com[i].num,com[i].shang,com[i].price);
printf("要按顺序显示吗?(Y/N)?");
fflush(stdin);
scanf("%c",&YesNo);
if(YesNo=='y'||YesNo=='Y')
{
printf("\t请输入排序方式:\n");
printf("\t(1.按价格排序从低到高;2.按商品号排序从低到高.)");
fflush(stdin);
scanf("%c",&tp);
if(tp=='1')
OnPrice(com,N);
else if(tp =='2')
OnNumber(com,N);
else
printf("\t输入了不正确项!\n");
}
}
} /*结束显示成绩*/
void OnPrice(record *com,int n ) /*按单价顺序*/
{ int i,j;
record temp;
printf("\t\t按单价排序---\n\n");
printf("商品总数为%d:\n",n);
for(j=0 ; j<n-1 ; j++) /*冒泡排序*/
for(i=0 ; i<n-j-1 ; i++)
if(com[i].price>com[i+1].price)
{
temp=com[i];
com[i]=com[i+1];
com[i+1]=temp;
}
printf("\n\t\t按成绩排序的结果如下(按分数从低到高):\n\n");
printf("序号\t\t商品名\t 商品号\t生产商\t单价\n");
for(i=0 ; i<n ; i++)
printf("%3d%17s%12d%12s%8.1f\n",i+1,com[i].name,com[i].num,com[i].shang,
com[i].price);
}
void OnNumber(record *com,int n ) /*按序号顺序*/
{
int i,j;
record temp;
printf("\t\t按商品号排序---\n\n");
printf("商品总数为%d:\n",n);
for(j=0 ; j<n-1 ; j++)
for(i=0 ; i<n-j-1 ; i++)
if(com[i].num>com[i+1].num)
{
temp=com[i];
com[i]=com[i+1];
com[i+1]=temp;
}
printf("\n\t按商品号排序的结果如下(按商品号从小到大):\n\n");
printf("序号\t\t商品名\t 商品号\t生产商\t单价\n");
for(i=0 ; i<n ; i++)
printf("%3d%17s%12d%12s%8.1f\n",i+1,com[i].name,com[i].num,com[i].shang,
com[i].price);
}
void DataAdd( ) /*增加*/
{
int i=0,n,m; /*商品名称*/
char shangming[30];
int haoma; /*生产商*/
char shangjia[10];
float danjia;
char YesOrNo;
record com[SIZE];
printf("\t\t读取原有数据信息---\n");
if(DataRead(com,&n)==1)
{
printf("\t\t信息读取完毕!\n\n");
printf("\t\t请输入要添加的商品总数:");
scanf("%d",&m);
printf("\t\t现在开始录入这%d个商品信息:\n\n",m);
while(i<m)
{
printf("第%d个商品的商品名:",i+1);
scanf("%s",&shangming);
printf("第%d个商品的商品号:",i+1);
scanf("%d",&haoma);
printf("第%d个商品的生产商:",i+1);
scanf("%s",&shangjia);
printf("第%d个商品的单价:",i+1);
scanf("%f",&danjia);
if(danjia>=0&&danjia<=1000) /*有效的单价才录入*/
{
strcpy(com[i+n].name,shangming);
com[i+n].num = haoma;
strcpy(com[i+n].shang,shangjia);
com[i+n].price = danjia;
i =i+1;
}
else
printf("输入的单价是一个无效的值,请重新输入!\n\n");
}
printf("要保存您刚才录入的数据吗(Y/N)?");
fflush(stdin);
scanf("%c",&YesOrNo);
if(YesOrNo=='y'||YesOrNo=='Y')
DataStorage(com,n+m);
else if(YesOrNo=='n'||YesOrNo=='N')
return;
else
printf("输入了不正确项,返回上一级\n");
return;
}
}
void DataDel( )//删除
{
void OnNumber(record *com,int n );
record com[SIZE];
int i; /*总记录数*/
int n; /*要删除的记录号*/
int m;
printf("\t\t读取原有数据信息---\n");
if(DataRead(com,&n)==1)
{
printf("\t\t原始数据如下:\n\n");
OnNumber(com,n );
printf("请输入你要删除的记录的序号");
scanf("%d",&m);
if(m>=1 && m<=n)
{
for(i=m-1;i<n-1;i++)
com [i] = com[i+1];
DataStorage(com,n-1);
}
}
}
void DataStatistic( ) /*统计信息*/
{
int high=0,low=200,ave=0;
int n,i,sum=0;
int g,l;
record com[SIZE];
printf("读取数据信息---\n");
if(DataRead(com,&n)==1)
{
printf("商品总数为%d\n\n",n);
for(i=0;i<n;i++)
{
if(com[i].price>high)
{
high = com[i].price;
g=i;
}
if(com[i].price<low)
{
low = com[i].price;
l=i;
}
sum += com[i].price;
}
ave=sum/n;
printf("\t\t最高\t最低\t平均\n"); /*计算值*/
printf("商品单价统计:\t%d\t%d\t%d\n\n",high,low,ave);
printf("序号\t\t商品名\t 商品号\t生产商\t单价\n");
for(i=0 ; i<n ; i++)
printf("%3d%17s%12d%12s%8.1f\n",i+1,com[i].name,com[i].num,com[i].shang,
com[i].price);
printf("\t\t 序号\t\t 商品名\t 商品号\t 生产商 单价\n");
printf("单价最高的商品是:%3d%17s%12d%12s%8.1f\n\n",g+1,com[g].name,com[g].num,com[g].shang,com[g].price);
printf("单价最低的商品是:%3d%17s%12d%12s%8.1f\n",l+1,com[l].name,com[l].num,com[l].shang,com[l].price);
} /*结束统计*/
}
⑤ 【实践】仿京东商城小程序(附源码)
最近学习使用小程序开发开发了一款仿京东商城小程序效果如下:
仿京东商城小程序基本实现首页搜索、商品分类列表、购物车等功能,项目结构如下:
购物车功能示例,在pages下创建shoppingCart.wxml文件:
样式shoppingCart.wxss:
购物车实现的功能主要有选择商品,加减商品数量、全选、反选、结算等,实现逻辑如下:
⑥ 网上商城源码
网上商城系统开发主要以J2EE技术为主,该语言具有功能强大和简单易用两个特征,同时开发人员也可以运用许多不同的框架来创建web项目。例如医疗救护、保险、教育、国防以及其他的不同部门网站都是以java为基础来开发的,也有采用第三方系统,像shop++、javashop等等使用广泛。
自定服务品牌,独立经营
商城系统运营者可以自定品牌、自主开通商店、对每个商店进行管理和授权,完全独立经营!
每个商店相对独立,互不干扰,安全性好
通过商城系统开通的每一个商店都使用独立的数据库和独立的目录,可以解析独立域名。每个商店都有独立的管理权限控制体系,数据保密性强。必要时还可购买独立版商店,迁出数据到商家自己的主机空间。
商店模版丰富、功能强大、通用性强,适合建立各种商店
商店系统使用的是改进后的网上商店系统v4.3版本,功能强大。有24套商店模版可选择。商店系统对不同的商品特性可以使用不同的订单项目和流程,并可指定不同的商品属性类型,因此适合建立各种类型的商店,用户群很广。
完备的使用、开通和控制体系
商城系统运营者可以设置默认的试用时间、试用时是否可直接访问、试用时空间限制、向商城发布商品时是否审核等试用参数;可以对每一个商店设置到期时间、空间大小、许可向商城发布商品数量等参数,用来制定多种建店套餐。使用在线支付还可以实时开通商店。
商城主站内容丰富、功能强大、交互性强
商城主站不仅具备管理下属商店和推荐商品的功能,同时也具备多套文章系统、下载系统、商务社区等内容管理功能和商店购物的全部功能,也可以直接销售自备商品。另外,商城系统主站特别加强了文章、商品栏目的内容交互功能,使商城主站更具大站风范。
去中心化越来越明显
随着移动互联网的飞跃式发展,信息垄断与信息不对称将会被彻底打破,移动互联网出现了越来越明显的去中心化趋势,变得多元化、扁平化,真正走向了用户时代。
优秀网店系统的八大特征:
1、SEO优化: 对于不是很懂网络推广和SEO的朋友来说,有些的网店系统需要有推广入口和网站自带的SEO设置,包括:各类搜索引擎、分类信息网站、导航网站等,这样才能快速有效的将网店推向市场。
2、整合营销: 营销手段包括邮件、短信等,方式从团购到限时抢购不等,快速引发用户购物欲望。
3、丰富模板: 丰富模板,可以进行可视化编辑,满足图片广告、网站公告、分类展示商品等各种需求。
4、淘宝对接: 这个是非常重要的一项功能,优秀的网店系统可以和淘宝网店进行对接,同步管理独立网店和淘宝店铺,使商品、订单、库存等各类信息得到同步。
5、支付方式: 很实际的一项需求,以满足各类不同用户,包括支付宝、财付通、网银、货到付款等主流方式。
6、快捷登录: 注册帐号什么的最麻烦了,所以优秀的网店系统还必须还有快捷登录功能:QQ、淘宝、微博、人人网等等。
7、会员营销: 针对不同消费者发放不同积分,不同等级采用不同邮件、短信进行营销,还能实现预存款等更优质功能。
8、数据报表: 运营统计数据是我们了解网站运营情况的基石。网店系统需要提供UV、PV、销售额、销量等运营数据,我们根据这些数据分析网站、发现问题、改变策略、不断优化。
基本具备以上特征的便是优秀的网店系统,这样才能满足我们日趋多样的需求,丰富我们我们的网站,最终支持网站获取良好的销售业绩。
适合用户群体: 有意向建立和已经在网上建立网店系统的企业和个人。
⑦ 商城网站源码是用PHP开发的好用吗
最近了解到目前,随着电子商务产业的快速发展,网上商城系统成本低,速度快等优势为众多企业带来了机遇,营销功能丰富,商品系统完善,用户体验良好。那么php商城系统开源的主要特征是什么?
1,php开源商城系统更方便
PHP程序快速开发,运行速度快,技术本身可以快速学习。嵌入HTML:因为PHP可以嵌入HTML语言,所以它与其他语言相关。编辑简单,实用,然后满足企业发展需要的功能,或增加企业的新需求;
2,php开源商城系统适应性强
选择开源商城系统,公司可以访问源代码,可以根据自己的意愿修改开源商城系统,降低此类风险,因为在开源社区中会有不断的维护和更新流。因此,受到各行各业中小企业的欢迎和广泛使用,使开源商城软件的适应性更强;
3,php开源商城系统强大的跨平台
由于PHP是服务器端脚本,因此它可以在UNIX,LINUX,WINDOWS,iOS和Android等平台上运行;
4,php开源商城系统效率更高
效率是每个用户在选择商城系统时将考虑的问题。PHPmall系统消耗相对较少的系统资源。
5,php开源商城系统更安全
安全是每个用户在选择电子商务系统时会考虑的第一个问题,因为开源商城系统的源代码是开放的并且没有得到很好的保护,用户将认为开源商城系统的安全性是不可靠的。然而,随着电子商务系统开发技术的成熟,对开源商城系统的研究也取得了很大进展。有特殊的人来解决电子商务系统的BUG等问题。因此,开源商城系统的安全性能不断提高。
商城系统应该具有的特点:
1、消费者购物非常的方便,可以直接在线上下订单。比如团长和消费者可以直接在团购系统中下订单;
2、如果消费者想要增加一些收益,就可以申请成为团长,团长作为自己的一份兼职,可以给自己带来一部分收益;
3、可设置商品抢购时间段,限购数量,商品分类,商品描述,库存设置,购物车等。
4、信漏团长可推荐团长,团长可推荐消费者,消费者也可推荐消费者(关系链自动绑定/自定义佣金比例),这样团长也不用担心自己的客户流失。
5、数据系统化(订单/款项/配送/关系链/佣金)等,减少了公司和团长工作量,避免了财务和订单出错。
6、管理后台:团长(自提点)信息的添加/删除/审核;商品上下架;消费散拆者信息管理,订单数据统计管理,配送管理等。
7、可直接导出或打印“某个小区/某个时间段/不同商品的销售数量”,并依此数据可直接进行货品配送。
8、每个团冲坦枣长都可在平台上查看自己小区的经营状况(消费者下单明细/自己的佣金明细/自己的下线明细/自己的订单明细等)。
10、每一个团购都有一个团长,团长也可以推荐其他社区的人成为团长,班长也可以推荐消费者,消费者也可以推荐其他的消费者,这样团长就不用担心消费者流失了。
11、商家有了商城系统之后,可以对订单数据进行快速的处理,减少了公司和团长的工作量,同时也能够避免在财务和订单方面出现问题。
总的来说,一个好的商城系统通过用户的主动分享,口碑传播效应,让你的推广成本直线下降,推广速度倍增,粉丝迅速累积,还能获得即时资金,订单量暴增,门店引流等等作用!这种模式从整体上解决了原来传统方式的流量问题、推广成本高昂问题、0库存问题、损耗问题、资金压力等等问题。