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 相关文章推荐
在树莓派2或树莓派B+上安装Python和OpenCV的教程
Mar 30 Python
进一步探究Python的装饰器的运用
May 05 Python
Python的Flask框架中配置多个子域名的方法讲解
Jun 07 Python
基于python爬虫数据处理(详解)
Jun 10 Python
HTML中使用python屏蔽一些基本功能的方法
Jul 07 Python
ubuntu16.04制作vim和python3的开发环境
Sep 23 Python
django重新生成数据库中的某张表方法
Aug 28 Python
python 穷举指定长度的密码例子
Apr 02 Python
python处理写入数据代码讲解
Oct 22 Python
浅析Python的命名空间与作用域
Nov 25 Python
简单介绍Python的第三方库yaml
Jun 18 Python
基于Python编写一个监控CPU的应用系统
Jun 25 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脚本代码
2011/02/19 PHP
让php处理图片变得简单 基于gb库的图片处理类附实例代码下载
2011/05/17 PHP
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
js超时调用setTimeout和间歇调用setInterval实例分析
2015/01/28 Javascript
javascript 闭包详解
2015/07/02 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
vue组件 keep-alive 和 transition 使用详解
2019/10/11 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
前端开发基础javaScript的六大作用
2020/08/06 Javascript
微信小程序实现电影App导航和轮播
2020/11/30 Javascript
深入Python解释器理解Python中的字节码
2015/04/01 Python
收藏整理的一些Python常用方法和技巧
2015/05/18 Python
Python爬取qq空间说说的实例代码
2018/08/17 Python
便捷提取python导入包的属性方法
2018/10/15 Python
将python图片转为二进制文本的实例
2019/01/24 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
用python写测试数据文件过程解析
2019/09/25 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
python基本算法之实现归并排序(Merge sort)
2020/09/01 Python
python线程池 ThreadPoolExecutor 的用法示例
2020/10/10 Python
UNIX文件系统分类
2014/11/11 面试题
幼儿园春季开学寄语
2014/04/03 职场文书
党的群众路线教育实践方案
2014/05/11 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
学前班语言教学计划
2015/01/20 职场文书
外出听课学习心得体会
2016/01/15 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
Golang表示枚举类型的详细讲解
2021/09/04 Golang