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 11 Python
django输出html内容的实例
May 27 Python
Python RabbitMQ消息队列实现rpc
May 30 Python
一篇文章了解Python中常见的序列化操作
Jun 20 Python
选择python进行数据分析的理由和优势
Jun 25 Python
Python Pillow.Image 图像保存和参数选择方式
Jan 09 Python
对python中 math模块下 atan 和 atan2的区别详解
Jan 17 Python
keras自动编码器实现系列之卷积自动编码器操作
Jul 03 Python
Python+pyftpdlib实现局域网文件互传
Aug 24 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
Python截图并保存的具体实例
Jan 14 Python
python调用百度AI接口实现人流量统计
Feb 03 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将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
php计算指定目录下文件占用空间的方法
2015/03/13 PHP
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
JQuery勾选指定name的复选框集合并显示的方法
2015/05/18 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
在node中如何使用 ES6
2017/04/22 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
layui 表单标签的校验方法
2019/09/04 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
Ant Design的Table组件去除
2020/10/24 Javascript
[03:24]CDEC.Y赛前采访 努力备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
Python求导数的方法
2015/05/09 Python
python&MongoDB爬取图书馆借阅记录
2016/02/05 Python
Python函数的周期性执行实现方法
2016/08/13 Python
Python selenium如何设置等待时间
2016/09/15 Python
Python金融数据可视化汇总
2017/11/17 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
django 自定义过滤器的实现
2019/02/26 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
python使用QQ邮箱实现自动发送邮件
2020/06/22 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
便利店投资的创业计划书
2014/01/12 职场文书
公司晚会主持词
2014/03/22 职场文书
积极向上的团队口号
2014/06/06 职场文书
国庆促销活动总结
2014/08/29 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
田径运动会通讯稿
2015/07/18 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS
处理canvas绘制图片模糊问题
2022/05/11 Javascript