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 相关文章推荐
linux系统使用python监测系统负载脚本分享
Jan 15 Python
用C++封装MySQL的API的教程
May 06 Python
itchat接口使用示例
Oct 23 Python
微信跳一跳自动运行python脚本
Jan 08 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
Apr 27 Python
使用python获取(宜宾市地震信息)地震信息
Jun 20 Python
使用 Python 处理 JSON 格式的数据
Jul 22 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
基于python+selenium的二次封装的实现
Jan 06 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
Python网络爬虫四大选择器用法原理总结
Jun 01 Python
python openssl模块安装及用法
Dec 06 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
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
addRule在firefox下的兼容写法
2006/11/30 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
JavaScript 数组详解
2013/10/10 Javascript
JavaScript中的关联数组问题
2015/03/04 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
JS &amp; JQuery 动态添加 select option
2016/06/08 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
2017/06/09 jQuery
Angular中ng-repeat与ul li的多层嵌套重复问题
2017/07/24 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
解决ant Design中Select设置initialValue时的大坑
2020/10/29 Javascript
python连接池实现示例程序
2013/11/26 Python
Python中的匿名函数使用简介
2015/04/27 Python
python仿抖音表白神器
2019/04/08 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
python中的测试框架
2020/11/13 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
HTML5中的拖放实现详解
2017/08/23 HTML / CSS
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
美国名牌香水折扣网站:Hottperfume
2021/02/10 全球购物
旅游管理实习自我鉴定
2013/09/29 职场文书
求职信模版
2013/11/30 职场文书
《都江堰》教学反思
2014/02/07 职场文书
学历公证委托书
2014/04/09 职场文书
2014最新股权信托合同协议书
2014/11/18 职场文书
物业保安辞职信
2015/05/12 职场文书
河童之夏观后感
2015/06/11 职场文书
新教师教学工作总结
2015/08/14 职场文书
导游词之青城山景区
2019/09/27 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书