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实现从web抓取文档的方法
Sep 26 Python
python自动化测试实例解析
Sep 28 Python
Python中if __name__ == '__main__'作用解析
Jun 29 Python
python xml解析实例详解
Nov 14 Python
Python实现提取XML内容并保存到Excel中的方法
Sep 01 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
Python实现AI自动抠图实例解析
Mar 05 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
Mar 10 Python
python实现暗通道去雾算法的示例
Sep 27 Python
python反扒机制的5种解决方法
Feb 06 Python
Python+tkinter实现高清图片保存
Mar 13 Python
python pygame 开发五子棋双人对弈
May 02 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
修改PHP的memory_limit限制的方法分享
2012/02/21 PHP
php获取mysql字段名称和其它信息的例子
2014/04/14 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
Swoole源码中如何查询Websocket的连接问题详解
2020/08/30 PHP
JavaScript confirm选择判断
2008/10/18 Javascript
33个优秀的 jQuery 图片展示插件分享
2012/03/14 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
JavaScript lodash常见用法系列小结
2016/08/24 Javascript
bootstrap suggest下拉框使用详解
2017/04/10 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
JS实现将二维数组转为json格式字符串操作示例
2018/07/12 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
[09:31]2016国际邀请赛中国区预选赛Yao赛后采访 答题送礼
2016/06/27 DOTA
[51:07]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
[44:37]完美世界DOTA2联赛PWL S3 Forest vs access 第一场 12.11
2020/12/13 DOTA
Python中super关键字用法实例分析
2015/05/28 Python
Python 操作MySQL详解及实例
2017/04/30 Python
Python二元赋值实用技巧解析
2019/10/25 Python
Python操作Jira库常用方法解析
2020/04/10 Python
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
统计学教授推荐信
2014/09/18 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
个人年终总结范文
2015/03/09 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
压缩Redis里的字符串大对象操作
2021/06/23 Redis
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js