PHP实现采集抓取淘宝网单个商品信息

调用淘宝的数据可以使用淘宝提供的api,如果只需调用淘宝商品图片名称等公开信息在自己网站上,使用php中的 file_get_contents 函数实现即可。

思路:

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?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放进页面,描述就会自动的加载进来了,当然多个商品描述在同一个页面也会只有一个描述会被加载的。

(0)

相关推荐

  • asp.net下使用jQuery.AutoComplete完成仿淘宝商品搜索自动完成功能(改进了键盘上下选择体验)

    首先来看一些效果图: 这个是淘宝首页的搜索效果 京东首页的搜索效果 我修改的jQuery.AutoComplete实现的效果 一.实现效果分析 我要实现的效果就是和GOOGLE类似,需要满足一下3个要求(因为这样我认为是最好的用户体验,毕竟GOOGLE做了那么久了): .首先根据关键字列出关键字相关的信息(包含统计信息) .可以使用键盘上下键选择(默认不选中第一条),文本框内容根据选择信息变换 .当选择第一或者最后一条时再向上或向下则取消选中,文本框中内容还原回原先输入的内容(这点比较重要,京东

  • 类似天猫商品详情随浏览器移动的示例代码

    使用该函数,必须集成于jquery包 原理:当浏览器移动到某个指定位置时,该图层上浮,然后加入一个样式,让该div层定位于浏览器顶部 复制代码 代码如下: //控制头部购物车的显示 function fixshow(min_height){ min_height ? min_height = min_height : min_height = 830; $(window).scroll(function(){ var s = $(window).scrollTop(); if( s > min_

  • JAVAEE model1模型实现商品浏览记录(去除重复的浏览记录)(一)

    在javaee中Model1模型是以jsp页面为中心的,jsp既要对浏览器的request做出逻辑处理(使用javabean),访问数据库也要显示出相关的页面. 在model1模型中,没有servlet. Model1结果图如下: Model1的可维护性  可扩展性都是较差的  只适合小项目. 首先运行结果 goods.jsp <%@page import="entity.Items"%> <%@page import="dao.ItemsDao"

  • Android仿淘宝商品浏览界面图片滚动效果

    用手机淘宝浏览商品详情时,商品图片是放在后面的,在第一个ScrollView滚动到最底下时会有提示,继续拖动才能浏览图片.仿照这个效果写一个出来并不难,只要定义一个Layout管理两个ScrollView就行了,当第一个ScrollView滑到底部时,再次向上滑动进入第二个ScrollView.效果如下: 需要注意的地方是: 1.如果是手动滑到底部需要再次按下才能继续往下滑,自动滚动到底部则不需要 2.在由上一个ScrollView滑动到下一个ScrollView的过程中多只手指相继拖动也不会导

  • 基于jquery的商品展示放大镜

    直接上代码吧(一共也才100来行,小东西) 复制代码 代码如下: $(document).ready(function() { _el("biggerPic").style.marginLeft = (0 - (getOffsetNumber(_el("biggerPic").style.width) - getOffsetNumber(_el("container").style.width))) + "px"; _el(&

  • JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)

    购物车点击可以减少或者添加商品并自动计算价格: 购物车中可能有这样的功能,那就是点击按钮可以实现商品数量的减少或者增加,并且能够实时的计算出总的商品价格,下面就通过代码实例介绍一下如何实现此功能,当然下面的这个模拟实现的购物车难登大雅之堂,但是可以从中得到一些启发或者相关的知识点,代码如下: 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title&

  • PHP 类商品秒杀计时实现代码

    要求要有小时分钟秒的实时倒计时的显示,用户端修改日期时间不会影响到倒计时的正常显示(也就是以服务器时间为准). 其实这和很多的考试等系统的时间限制功能同样的要求. 总不能用ajax每秒都获取服务器时间吧,所以实时倒计时一定要用javascript实现.这很简单,网上一大把的例子. 现在问题是解决用户端修改日期时间对我们的显示的影响. 解决的办法是计算出用户端的时间和服务器的时间差,这样问题的完成解决了. 这样只需要运行一次php,实时倒计时的时间就和服务器的时间同步了. 理论是同步的,但实际测试

  • Android时光轴实现淘宝物流信息浏览效果

    本文实例为大家分享了Android时光轴的制作方法,供大家参考,具体内容如下 1. 效果 2.分析和实现 2.1效果实现: 之前想了一下这种效果,因为只需要用到自己的项目中所以采用图片直接布局的形式去实现效果,虽然效果实现了,但是后来发现了出了很多问题:第一Android的分辨率太多了直接设置xxxdp难免有部分机型出现不适配的情况,第二我们与右边这部分需要对齐的问题这个就比较头大. 所以目前的实现效果方式是这样子的: 1.自定义TimerLineMarker,根据自定义属性获取点和线的背景资源

  • Jquery 最近浏览过的商品的功能实现代码

    <script type="text/javascript" src="JS/jquery.js"></script> //与Prototype 类似的框架 <script type="text/javascript" src="JS/JCookie.js"></script> //插件 复制代码 代码如下: /*JCookie.js * / jQuery.cookie = fu

  • 仿当当网淘宝网等主流电子商务网站商品分类导航菜单

    本文实现了一个分类导航的菜单,和大多数流行的电子商务网站类似. 菜单的实现难点主要在CSS的编写上,并没有用到太多的JS. 下面只介少几处关键点,详细的实现可以直接查看源代码.所有的代码都在一个sidebar.html文件中. (1) 在图片中的标号1的开口如何实现? 开口右边是一个postion被设置成absolute的div, 这个div向左刚好偏移了1px, 使得左边的菜单栏压住其边框,而选中的菜单又边框是白色,就形成了缺口. (2) 在图片中标号2处如何实现每个连接不会中间换行? 可以把

随机推荐