Home >Backend Development >PHP Tutorial >php file_get_contents 转curl抓取淘宝商品属性 大神帮忙下

php file_get_contents 转curl抓取淘宝商品属性 大神帮忙下

WBOY
WBOYOriginal
2016-06-23 13:30:471215browse

以下代码如何改为用 curl来抓取呢?并且以商品的IID保存

function get_shuxing($type,$iid){if($type=='tmall'){$text=file_get_contents("http://detail.tmall.com/item.htm?id=$iid");preg_match('|<ul id="J_AttrUL">(.*)</ul>|isU',$text, $match);}elseif ($type=='taobao'){$text=file_get_contents("http://item.taobao.com/item.htm?id=$iid");preg_match('|<ul class="attributes-list">(.*)</ul>|isU',$text, $match);}$match=$match[0];$match = iconv('gbk', 'utf-8', $match);echo $match;}


回复讨论(解决方案)

有哪位大神帮忙呢》

你不给测试数据怎么弄,再怎么也得给个$iid吧...

你不给测试数据怎么弄,再怎么也得给个$iid吧...



http://detail.tmall.com/item.htm?id=13317551791
可以吗!就是获取商品的产品参数

$html=file_get_contents('http://detail.tmall.com/item.htm?id=13317551791');include 'simple_html_dom.php';//网上下一个 $dom=new simple_html_dom();// $html utf8才可以$dom->load($html);$names=$dom->find('select[id=js]');$res=array();$lis=$dom->find('ul[id=J_AttrUL] li');foreach($lis as $k=>$li){    $temp=$li->text();	list($key,$value)=explode(':',$temp);	$data[$key]=$value;}echo "<pre class="brush:php;toolbar:false">";print_r($data);echo "
";/*Array(    [上市年份季节] =>  2015年夏季    [裤长] =>  长裤    [货号] =>  Y306    [颜色] =>  Y139蓝色 Y118蓝色偏小一码 Y139复古蓝 Y306黑蓝 深色Y306/蓝色 Y306浅蓝色 YN8601蓝色 Y007怀旧蓝    [尺码] =>  40 38 36 34 33 32 31 30 29 28    [牛仔面料] =>  常规牛仔布    [工艺处理] =>  压皱 水洗 复古 商务 个性 潮牌  休闲 nzk 修身 漂白 猫须 破洞 雪花洗 手擦 磨边 刮烂 电磨 针缝 喷砂 赤耳 马骝 镶边 无工艺 扎花 刺绣 扎染    [品牌] =>  YYK    [款式细节] =>  立体剪裁    [上市时间] =>  2013年    [适用季节] =>  夏季    [适用对象] =>  大码    [材质] =>  棉涤    [弹力] =>  无弹    [腰型] =>  中腰    [裤脚口款式] =>  直脚    [裤门襟] =>  拉链    [洗水工艺] =>  水洗 石洗/石磨 砂洗 石漂洗 漂染 碧纹洗 吊染 雪花洗 酵素洗 化学洗    [厚薄] =>  薄款    [款式版型] =>  合体直筒    [基础风格] =>  时尚都市    [细分风格] =>  日系复古)*/

$html=file_get_contents('http://detail.tmall.com/item.htm?id=13317551791');include 'simple_html_dom.php';//网上下一个 $dom=new simple_html_dom();// $html utf8才可以$dom->load($html);$names=$dom->find('select[id=js]');$res=array();$lis=$dom->find('ul[id=J_AttrUL] li');foreach($lis as $k=>$li){    $temp=$li->text();	list($key,$value)=explode(':',$temp);	$data[$key]=$value;}echo "<pre class="brush:php;toolbar:false">";print_r($data);echo "
";/*Array(    [上市年份季节] =>  2015年夏季    [裤长] =>  长裤    [货号] =>  Y306    [颜色] =>  Y139蓝色 Y118蓝色偏小一码 Y139复古蓝 Y306黑蓝 深色Y306/蓝色 Y306浅蓝色 YN8601蓝色 Y007怀旧蓝    [尺码] =>  40 38 36 34 33 32 31 30 29 28    [牛仔面料] =>  常规牛仔布    [工艺处理] =>  压皱 水洗 复古 商务 个性 潮牌  休闲 nzk 修身 漂白 猫须 破洞 雪花洗 手擦 磨边 刮烂 电磨 针缝 喷砂 赤耳 马骝 镶边 无工艺 扎花 刺绣 扎染    [品牌] =>  YYK    [款式细节] =>  立体剪裁    [上市时间] =>  2013年    [适用季节] =>  夏季    [适用对象] =>  大码    [材质] =>  棉涤    [弹力] =>  无弹    [腰型] =>  中腰    [裤脚口款式] =>  直脚    [裤门襟] =>  拉链    [洗水工艺] =>  水洗 石洗/石磨 砂洗 石漂洗 漂染 碧纹洗 吊染 雪花洗 酵素洗 化学洗    [厚薄] =>  薄款    [款式版型] =>  合体直筒    [基础风格] =>  时尚都市    [细分风格] =>  日系复古)*/



虽然是可以,但是不是我想要的,谢谢啦

这些不是产品参数?数据都取出来了,至于怎么用,就看你自己处理,我又不是知道你要什么样的数据格式,一维,二维?键值对?

不要用正则,我记得抓这些属性有http请求方法的,你抓个包就知道了

这样吗?

function get_shuxing($type,$iid){        if($type=='tmall'){                //$text=file_get_contents("http://detail.tmall.com/item.htm?id=$iid");                $text=use_curl("http://detail.tmall.com/item.htm?id=$iid");                preg_match('|<ul id="J_AttrUL">(.*)</ul>|isU',$text, $match);        }elseif ($type=='taobao'){                //$text=file_get_contents("http://item.taobao.com/item.htm?id=$iid");                $text=use_curl("http://item.taobao.com/item.htm?id=$iid");                preg_match('|<ul class="attributes-list">(.*)</ul>|isU',$text, $match);        }        $match=$match[0];        $match = iconv('gbk', 'utf-8', $match);        echo $match;}function use_curl($url){        $ch = curl_init($url);        curl_setopt($ch, CURLOPT_HEADER, 0);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        $output = curl_exec($ch);        curl_close($ch);        return $output;}get_shuxing('taobao',45098460735);

这样吗?

function get_shuxing($type,$iid){        if($type=='tmall'){                //$text=file_get_contents("http://detail.tmall.com/item.htm?id=$iid");                $text=use_curl("http://detail.tmall.com/item.htm?id=$iid");                preg_match('|<ul id="J_AttrUL">(.*)</ul>|isU',$text, $match);        }elseif ($type=='taobao'){                //$text=file_get_contents("http://item.taobao.com/item.htm?id=$iid");                $text=use_curl("http://item.taobao.com/item.htm?id=$iid");                preg_match('|<ul class="attributes-list">(.*)</ul>|isU',$text, $match);        }        $match=$match[0];        $match = iconv('gbk', 'utf-8', $match);        echo $match;}function use_curl($url){        $ch = curl_init($url);        curl_setopt($ch, CURLOPT_HEADER, 0);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        $output = curl_exec($ch);        curl_close($ch);        return $output;}get_shuxing('taobao',45098460735);



就是想改成这样的,但是tmall的参数却无法获取到,改回我自己的又正常,奇怪了


这样吗?

function get_shuxing($type,$iid){        if($type=='tmall'){                //$text=file_get_contents("http://detail.tmall.com/item.htm?id=$iid");                $text=use_curl("http://detail.tmall.com/item.htm?id=$iid");                preg_match('|<ul id="J_AttrUL">(.*)</ul>|isU',$text, $match);        }elseif ($type=='taobao'){                //$text=file_get_contents("http://item.taobao.com/item.htm?id=$iid");                $text=use_curl("http://item.taobao.com/item.htm?id=$iid");                preg_match('|<ul class="attributes-list">(.*)</ul>|isU',$text, $match);        }        $match=$match[0];        $match = iconv('gbk', 'utf-8', $match);        echo $match;}function use_curl($url){        $ch = curl_init($url);        curl_setopt($ch, CURLOPT_HEADER, 0);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        $output = curl_exec($ch);        curl_close($ch);        return $output;}get_shuxing('taobao',45098460735);



就是想改成这样的,但是tmall的参数却无法获取到,改回我自己的又正常,奇怪了


<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>302 Found</title></head><body bgcolor="white"><h1>302 Found</h1><p>The requested resource resides temporarily under a different URI.</p><hr/>Powered by Tengine</body></html>

tmall 返回302了
Statement:
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