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实现域名系统(DNS)正向查询的方法
Apr 19 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 Python
Python使用Django实现博客系统完整版
Sep 29 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
Dec 03 Python
python合并已经存在的sheet数据到新sheet的方法
Dec 11 Python
python代理工具mitmproxy使用指南
Jul 04 Python
python 利用jinja2模板生成html代码实例
Oct 10 Python
python 计算方位角实例(根据两点的坐标计算)
Jan 17 Python
Python打印特殊符号及对应编码解析
May 07 Python
解决Keras自带数据集与预训练model下载太慢问题
Jun 12 Python
Python机器学习之逻辑回归
May 11 Python
Python 实现定积分与二重定积分的操作
May 26 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、Python和Javascript的装饰器模式对比
2015/02/03 PHP
使用PHP实现微信摇一摇周边红包
2016/01/04 PHP
PHP批量获取网页中所有固定种子链接的方法
2016/11/18 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
Jquery判断$("#id")获取的对象是否存在的方法
2013/09/25 Javascript
关闭ie窗口清除Session的解决方法
2014/01/10 Javascript
Node.js中使用事件发射器模式实现事件绑定详解
2014/08/15 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
2017/09/14 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
vue在路由中验证token是否存在的简单实现
2019/11/11 Javascript
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
六个窍门助你提高Python运行效率
2015/06/09 Python
Python标准库06之子进程 (subprocess包) 详解
2016/12/07 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
OpenCV图像颜色反转算法详解
2019/05/13 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
Django框架反向解析操作详解
2019/11/28 Python
pytorch: Parameter 的数据结构实例
2019/12/31 Python
Python集合操作方法详解
2020/02/09 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
Python内置函数及功能简介汇总
2020/10/13 Python
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
土木工程毕业生推荐信
2013/10/28 职场文书
租房协议书
2014/04/10 职场文书
作风转变年心得体会
2014/10/22 职场文书
团组织推优材料
2014/12/29 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
交通安全教育心得体会
2016/01/15 职场文书