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找出9个连续的空闲端口
Feb 01 Python
Python的requests网络编程包使用教程
Jul 11 Python
对python中两种列表元素去重函数性能的比较方法
Jun 29 Python
对python周期性定时器的示例详解
Feb 19 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
Mar 22 Python
python 猴子补丁(monkey patch)
Jun 26 Python
python turtle库画一个方格和圆实例
Jun 27 Python
一行python实现树形结构的方法
Aug 09 Python
Django自带的加密算法及加密模块详解
Dec 03 Python
Django中的模型类设计及展示示例详解
May 29 Python
解决pip安装的第三方包在PyCharm无法导入的问题
Oct 15 Python
python自动化之如何利用allure生成测试报告
May 02 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+mysql)
2007/11/23 PHP
微信扫描二维码登录网站代码示例
2013/12/30 PHP
php使用$_POST或$_SESSION[]向js函数传参
2014/09/16 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
filemanage功能中用到的common.js
2007/04/08 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
2014/05/08 Javascript
JS实现自适应高度表单文本框的方法
2015/02/25 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
JS高级运动实例分析
2016/12/20 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
vue组件间的参数传递实例详解
2019/04/26 Javascript
html2canvas属性和使用方法以及如何使用html2canvas将HTML内容写入Canvas生成图片
2020/01/12 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
关于Python中浮点数精度处理的技巧总结
2017/08/10 Python
pandas series序列转化为星期几的实例
2018/04/11 Python
python 实现登录网页的操作方法
2018/05/11 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
网络研修随笔感言
2014/02/17 职场文书
绿色城市实施方案
2014/03/19 职场文书
分公司任命书
2014/06/06 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
工程款催款函
2015/06/24 职场文书
初中毕业感言300字
2015/07/31 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL
python playwright 自动等待和断言详解
2021/11/27 Python