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中的字符串知识点
Apr 14 Python
利用python实现命令行有道词典的方法示例
Jan 31 Python
Python AES加密模块用法分析
May 22 Python
Python各类图像库的图片读写方式总结(推荐)
Feb 23 Python
python将文本中的空格替换为换行的方法
Mar 19 Python
python接口自动化测试之接口数据依赖的实现方法
Apr 26 Python
python plotly画柱状图代码实例
Dec 13 Python
Python实现爬取网页中动态加载的数据
Aug 17 Python
基于python爬取链家二手房信息代码示例
Oct 21 Python
python从ftp获取文件并下载到本地
Dec 05 Python
Python实现查询剪贴板自动匹配信息的思路详解
Jul 09 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 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
法国:浪漫之都的咖啡文化
2021/03/03 咖啡文化
在php MYSQL中插入当前时间
2008/04/06 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
给before和after伪元素设置js效果的方法
2015/12/04 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
jQuery模拟select实现下拉菜单功能
2016/06/20 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
详解Vuex管理登录状态
2017/11/13 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
小程序中的箭头函数的具体使用
2020/06/19 Javascript
[01:06:59]完美世界DOTA2联赛PWL S2 Magma vs FTD 第一场 11.29
2020/12/02 DOTA
python三元运算符实现方法
2013/12/17 Python
Python base64编码解码实例
2015/06/21 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
python分数表示方式和写法
2019/06/26 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
python、Matlab求定积分的实现
2019/11/20 Python
pytorch实现对输入超过三通道的数据进行训练
2020/01/15 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
Java语言程序设计测试题改错题部分
2014/07/22 面试题
教师自荐信范文
2013/12/09 职场文书
管理学专业个人求职信范文
2013/12/13 职场文书
出纳工作岗位责任制
2014/02/02 职场文书
建筑工地宣传标语
2014/06/18 职场文书
汶川大地震感悟
2015/08/10 职场文书
运动会广播稿200字
2015/08/19 职场文书
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers