python爬取淘宝商品详情页数据


Posted in Python onFebruary 23, 2018

在讲爬取淘宝详情页数据之前,先来介绍一款 Chrome 插件:Toggle JavaScript (它可以选择让网页是否显示 js 动态加载的内容),如下图所示:

python爬取淘宝商品详情页数据

当这个插件处于关闭状态时,待爬取的页面显示的数据如下:

python爬取淘宝商品详情页数据

当这个插件处于打开状态时,待爬取的页面显示的数据如下:

python爬取淘宝商品详情页数据

  可以看到,页面上很多数据都不显示了,比如商品价格变成了划线价格,而且累计评论也变成了0,说明这些数据都是动态加载的,以下演示真实价格的找法(评论内容找法类似),首先检查页面元素,然后点击Network选项卡,刷新页面,可以看到很多动态加载的数据,在里面找到包含商品价格的链接(可以使用Ctrl+f查找),如下图所示:

python爬取淘宝商品详情页数据

  将此链接在新的标签页打开,如下图所示,可以看到,被禁止访问了,所以爬取的时候要在headers中加上Referer字段告诉服务器你是从哪个页面链接过来的,Referer字段可以在这里查看:

python爬取淘宝商品详情页数据 

评论数据的链接可以直接访问(和价格信息找法类似),这里我知己去访问它,如下图所示:

python爬取淘宝商品详情页数据

  可以看到评论信息总共有7页,而且都是json格式的数据,所以可以用json反序列化去抽取数据,当然也可以用正则表达式,下面我将演示用正则去抽取数据,因为评论数据过多,这里只抓取第一页,如果需要所有评论数据,可以循环构造url,只需要修改currentPage参数的值就行。程序源码如下:

# filename:spider_taobao.py
#!/usr/bin/env python
# -*- coding=utf-8 -*-

import re
import urllib2

def spider_taobao(url):

 headers = {
  'Accept':'application/json, text/plain, */*',
  'Accept-Language':'zh-CN,zh;q=0.3',
  'Referer':'https://item.taobao.com/item.htm',
  'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
  'Connection':'keep-alive',
 }

 goods_id = re.findall('id=(\d+)', url)[0]

 try:
  req = urllib2.Request(url=url, headers=headers)
  res = urllib2.urlopen(req).read().decode('gbk', 'ignore')
 except Exception as e:
  print '无法打开网页:', e.reason

 try:
  title = re.findall('<h3 class="tb-main-title" data-title="(.*?)"', res)
  title = title[0] if title else None
  line_price = re.findall('<em class="tb-rmb-num">(.*?)</em>', res)[0]

  # 30-42行为抓取淘宝商品真实价格,该数据是动态加载的
  purl = "https://detailskip.taobao.com/service/getData/1/p1/item/detail/sib.htm?itemId={}&modules=price,xmpPromotion".format(goods_id)

  price_req = urllib2.Request(url=purl, headers=headers)
  price_res = urllib2.urlopen(price_req).read()
  data = list(set(re.findall('"price":"(.*?)"', price_res)))
  # data列表中的价格可能是定值与区间的组合,也可能只是定值,而且不一定有序
  real_price = ""
  for t in data:
   if '-' in t:
    real_price = t
    break
  if not real_price:
   real_price = sorted(map(float, data))[0]

  # 45-53行为抓取评论数据,该数据也是动态加载的
  comment_url = "https://rate.tmall.com/list_detail_rate.htm?itemId={}&sellerId=880734502¤tPage=1".format(goods_id)
  comment_data = urllib2.urlopen(comment_url).read().decode("GBK", "ignore")
  temp_data = re.findall('("commentTime":.*?),"days"', comment_data)
  temp_data = temp_data if temp_data else re.findall('("rateContent":.*?),"reply"', comment_data)
  comment = ""
  for data in temp_data:
   comment += data.encode('utf-8')
  comment = comment if comment else "暂无评论"
 except Exception as e:
  print '数据抽取失败!!!'

 print '商品名:', title
 print '划线价格:', line_price
 print '真实价格:', real_price
 print '商品链接:', url
 print '部分评论内容:', comment

if __name__ == '__main__':
 #url = 'https://item.taobao.com/item.htm?spm=a230r.1.14.30.43306a3fOeuZ0B&id=553787375606&ns=1&abbucket=10#detail'
 url = raw_input("请输入商品链接: ")
 spider_taobao(url)

运行结果如下:

python爬取淘宝商品详情页数据

更多内容请参考专题《python爬取功能汇总》进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用python实现的去除win下文本文件头部BOM的代码
Feb 10 Python
python实现斐波那契递归函数的方法
Sep 08 Python
Python的Django框架可适配的各种数据库介绍
Jul 15 Python
python生成随机图形验证码详解
Nov 08 Python
Python基于百度AI的文字识别的示例
Apr 21 Python
记一次python 内存泄漏问题及解决过程
Nov 29 Python
python通过配置文件共享全局变量的实例
Jan 11 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
Jun 03 Python
python实现二级登陆菜单及安装过程
Jun 21 Python
Python计算公交发车时间的完整代码
Feb 12 Python
Flask模板引擎Jinja2使用实例
Apr 23 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
Python如何抓取天猫商品详细信息及交易记录
Feb 23 #Python
python列表生成式与列表生成器的使用
Feb 23 #Python
1分钟快速生成用于网页内容提取的xslt
Feb 23 #Python
python使用xslt提取网页数据的方法
Feb 23 #Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
Feb 23 #Python
python爬虫获取多页天涯帖子
Feb 23 #Python
Python即时网络爬虫项目启动说明详解
Feb 23 #Python
You might like
PHP 强制下载文件代码
2010/10/24 PHP
php学习之变量的使用
2011/05/29 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
PHP中非常有用却鲜有人知的函数集锦
2019/08/17 PHP
JavaScript的Function详细
2006/11/14 Javascript
FCK调用方法..
2006/12/21 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
javascript中节点的最近的相关节点访问方法
2013/03/20 Javascript
innerText 使用示例
2014/01/23 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
BootStrap 模态框实现刷新网页并关闭功能
2017/01/04 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
vue里如何主动销毁keep-alive缓存的组件
2019/03/21 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
Javascript实现打鼓效果
2021/01/29 Javascript
Python脚本实现网卡流量监控
2015/02/14 Python
利用Django内置的认证视图实现用户密码重置功能详解
2017/11/24 Python
python批量修改文件编码格式的方法
2018/05/31 Python
Python基本socket通信控制操作示例
2019/01/30 Python
Python库安装速度过慢解决方案
2020/07/14 Python
德国孕妇装和婴童服装网上商店:bellybutton
2018/04/12 全球购物
外国语学院毕业生自荐信
2013/10/28 职场文书
八年级英语教学反思
2014/01/09 职场文书
写演讲稿所需要注意的4个条件
2014/01/09 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
工作过失检讨书
2014/02/23 职场文书
德语专业求职信
2014/03/12 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
小学体育教学随笔
2015/08/14 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
html网页引入svg图片的4种方式
2022/08/05 HTML / CSS