python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程


Posted in Python onMay 22, 2018

实例如下所示:

import requests
import re,sys,os
import json
import threading
import pprint
class spider:
 def __init__(self,sid,name):
 
 self.id = sid
 self.headers = { "Accept":"text/html,application/xhtml+xml,application/xml;",
  "Accept-Encoding":"gzip",
  "Accept-Language":"zh-CN,zh;q=0.8",
  "Referer":"http://www.example.com/",
  "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36"
  }
 
 self.name=name
 def openurl(self,url):
 
 self.request = requests.get(url,headers = self.headers) 
 if self.request.ok:
  return self.request.text
  
 def matchs(self):
 
 tmall_exp = r"Setup\(([\s\S]+?)\);"### 匹配商品数据的正则
 detail= r"src=\"(https://img\S+?[jpgifn]+?)\"" ###匹配 商品详情图的正则
 html = self.openurl("https://detail.tmall.com/item.htm?id=%s"%self.id)
 data = re.findall(tmall_exp,html)
 data = json.loads(data[0])
 main_img = data['propertyPics'] ## 这里包括了主图和颜色图的地址
 color_data =data['valItemInfo'] ['skuList'] ### 这里获得商品的颜色信息列表 包括颜色编码 颜色名称,商品skuID
 detail_html = self.openurl("http:"+data['api']["httpsDescUrl"])
 detail_image = re.findall(detail,detail_html)
 self.newdata={"MAIN":main_img['default'],"DETAIL":detail_image,"id":self.id,}
 
 psvs = []
 self.newdata['COLOR']=[]
 
 for v in range(len(color_data)):
  if ";"in color_data[v]["pvs"]:
  psv = color_data[v]['pvs'][color_data[v]['pvs'].find(";")+1:]
  else:
  psv = color_data[v]['pvs']
  if psv in psvs:
  
  continue
  psvs.append(psv)
 
  self.newdata['COLOR'].append({color_data[v]["names"]:main_img[";"+psv+";"]})
  
 pprint.pprint(self.newdata)
 
 return self.newdata
 
 def download(self):
 if len(self.newdata)>0:
  for x in range(len(self.newdata['MAIN'])):
  
  threading.Thread(target=self.download_main,args=(self.newdata['MAIN'][x],x)).start()
  
  for x in self.newdata['COLOR']:
  
  threading.Thread(target=self.download_color,args=(x,)).start()
  for x in range(len(self.newdata['DETAIL'])):
  
  threading.Thread(target=self.download_detail,args=(self.newdata['DETAIL'][x],x)).start()
 return
 def download_main(self,url,index):
 try:
  img = requests.get("http:"+url,stream=True,headers = self.headers,timeout=10)
 except:
  print(sys.exc_info())
  return
 if img.ok:
  if not os.path.exists(self.name+"/main"):
  try:
   os.makedirs(self.name+"/main")
  except:
   pass
  imgs = open(self.name+"/main/%s.jpg"%index,"wb")
  imgs.write(img.content)
  imgs.close()
  
 def download_color(self,url):
  
 try:
  img = requests.get("http:"+url[list(url.keys())[0]][0],stream=True,headers = self.headers,timeout=10)
 except:
  print(sys.exc_info())
  return
 if img.ok:
  if not os.path.exists(self.name+"/color"):
  try:
   os.makedirs(self.name+"/color")
  except:
   pass
  if "/"in list(url.keys())[0]:
  color = list(url.keys())[0].replace("/","_")
  elif "\\" in list(url.keys())[0]:
  color = list(url.keys())[0].replace("\\","_")
  else:
  color = list(url.keys())[0]
  imgs = open(self.name+"/color/%s.jpg"%color,"wb")
  imgs.write(img.content)
  imgs.close()
 def download_detail(self,url,index):
 try:
  img = requests.get(url,stream=True,headers = self.headers,timeout=10)
 except:
  print(sys.exc_info())
  return
 if img.ok:
  if not os.path.exists(self.name+"/detail"):
  try:
   os.makedirs(self.name+"/detail")
  except:
   pass
  
  imgs = open(self.name+"/detail/%s.jpg"%index,"wb")
  imgs.write(img.content)
  imgs.close()
  
if __name__ =="__main__":
 
 sid = 528766269341 ## 这里输入天猫宝贝ID
 taobao = spider(sid,"下载图片/T")
 taobao.matchs()
 taobao.download()

以上这篇python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 测试实现方法
Dec 24 Python
举例讲解Django中数据模型访问外键值的方法
Jul 21 Python
浅谈Python处理PDF的方法
Nov 10 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
Django中使用celery完成异步任务的示例代码
Jan 23 Python
python3+PyQt5实现自定义分数滑块部件
Apr 24 Python
使用pycharm设置控制台不换行的操作方法
Jan 19 Python
Python实现将蓝底照片转化为白底照片功能完整实例
Dec 13 Python
Python猜数字算法题详解
Mar 01 Python
python 5个实用的技巧
Sep 27 Python
Django正则URL匹配实现流程解析
Nov 13 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 Python
python3.x实现发送邮件功能
May 22 #Python
python 爬虫 批量获取代理ip的实例代码
May 22 #Python
python 获取当天每个准点时间戳的实例
May 22 #Python
selenium+python 去除启动的黑色cmd窗口方法
May 22 #Python
python3实现163邮箱SMTP发送邮件
May 22 #Python
django请求返回不同的类型图片json,xml,html的实例
May 22 #Python
Django使用HttpResponse返回图片并显示的方法
May 22 #Python
You might like
一个简单的PHP入门源程序
2006/10/09 PHP
使用Limit参数优化MySQL查询的方法
2008/11/12 PHP
Yii结合CKEditor实现图片上传功能
2014/06/13 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
2011/12/21 Javascript
jquery星级插件、支持页面中多次使用
2012/03/25 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
javascript闭包的理解
2015/04/01 Javascript
极易被忽视的javascript面试题七问七答
2016/02/15 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
jQuery实现的简单悬浮层功能完整实例
2017/01/23 Javascript
js实现返回顶部效果
2017/03/10 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
2017/05/28 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
大转盘抽奖小程序版 转盘抽奖网页版
2020/04/16 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
Python3 伪装浏览器的方法示例
2017/11/23 Python
Python DataFrame.groupby()聚合函数,分组级运算
2018/09/18 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
Python内存映射文件读写方式
2020/04/24 Python
使用Python爬取Json数据的示例代码
2020/12/07 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
Css3圆角边框制作代码
2015/11/18 HTML / CSS
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
企业管理专业个人求职信范文
2013/09/24 职场文书
实习单位接收函
2014/01/11 职场文书
2015年双拥工作总结
2015/04/08 职场文书
工地食品安全责任书
2015/05/09 职场文书
Redis高并发防止秒杀超卖实战源码解决方案
2021/11/01 Redis