麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網站 > 建站經驗 > 正文

使用php中的file_get_contents函數抓取調用淘寶任意一商品詳情的方法

2024-04-25 20:32:58
字體:
來源:轉載
供稿:網友

使用淘寶提供的api當然可以調用淘寶的數據,但是基于當前項目只需調用淘寶商品圖片名稱等公開信息在自己網站上就ok,因此使用php中的file_get_contents函數實現。ecshop二次開發

思路:

file_get_contents(url)該函數根據url如http://www.baidu.com將該網頁內容(源碼)以字符串形式輸出(一個 整字符串),然后配合preg_match,preg_replace等這些正則表達式操作就可以實現獲取該url特定div,img等信息了。

當然前題 是淘寶在單個商品頁面的結構是固定的,如500圖的img中id就是J_ImgBooth,我想在一段時間內這種命名方式應該不會變吧!

具體實現:(獲取500圖,名稱,價格,屬性及商品描述)

$text=file_get_contents("http://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-10545496040.65.7DFLy7&id=44576319301"); //將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 class="attributes">…</div>標簽后面不是</div>< div id="description">就是</div><div class="box J_TBox">,所以我 們可以采用變通法達到獲取屬性標簽內容的目的。

preg_match('/<(div)[^c]*class=/"attributes/"[^>]*>.*<////1>/is', $text, $text0);

//這個正則會抓取<div class="attributes"開始到整個頁面最后一個</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" class="box"> </div>

<div id="description" class="J_DetailSection">

<div class="content" id="J_DivItemDesc">描述加載中</div>

</div>”

這幾個div是加載描述所必須的,那么下面就是寫代碼了:

preg_match_all('/<script[^>]*>[^<]*<//script>/is', $text, $content);//頁面js腳本

$content=$content[0];

$description='<div id="detail" class="box"> </div>

<div id="description" class="J_DetailSection">

<div class="content" id="J_DivItemDesc">描述加載中</div>

</div>';

foreach ($content as &$v){$description.=iconv('GBK','UTF-8',$v);};

//將這個$description放進頁面,描述就會自動的加載進來了,當然多個商品描述在同一個頁面也會只有一個描述會被加載的。ecshop整站開發

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久资源总站 | 91精品国产日韩91久久久久久360 | 成人在线视频黄色 | 欧美精品久久久久久久久久 | 久久草在线视频免费 | 成人免费av在线播放 | h色视频网站 | chinese中国真实乱对白 | 国产99页 | 欧美日韩中文字幕在线视频 | 亚洲福利视 | 黄色免费在线视频网站 | 日本免费a∨| 福利在线小视频 | 黄色网址在线免费播放 | 亚洲一区在线国产 | 午夜精品成人 | 中文字幕在线播放不卡 | www.91pron| 91香蕉影视 | 久久最新网址 | 亚洲码无人客一区二区三区 | 成人一区二区三区在线 | 国产精品一区2区3区 | 亚洲一级片免费观看 | 黑人一区二区三区四区五区 | 国产精品久久久久久久久岛 | 免费观看亚洲视频 | 神马久久蜜桃 | 一级片九九 | 成人免费一区二区三区在线观看 | 精品国产一区二区三区久久久蜜 | 久久九九热re6这里有精品 | 在线中文字幕不卡 | 国产高潮好爽受不了了夜色 | 一级做a爱性色毛片免费1 | 在线日韩av电影 | 久久久久久久久久综合 | 国产日韩三区 | 国产一级一区 | 色欧美视频 |