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读取TXT到数组及列表去重后按原来顺序排序的方法
Jun 26 Python
python实现矩阵乘法的方法
Jun 28 Python
python实现对指定输入的字符串逆序输出的6种方法
Apr 26 Python
对Python 2.7 pandas 中的read_excel详解
May 04 Python
pandas 对每一列数据进行标准化的方法
Jun 09 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
python time.sleep()是睡眠线程还是进程
Jul 09 Python
Django缓存系统实现过程解析
Aug 02 Python
对tensorflow中cifar-10文档的Read操作详解
Feb 10 Python
Python Switch Case三种实现方法代码实例
Jun 18 Python
详解用python -m http.server搭一个简易的本地局域网
Sep 24 Python
python实现定时发送邮件到指定邮箱
Dec 23 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
linux下使用ThinkPHP需要注意大小写导致的问题
2011/08/02 PHP
浅析PHP中Collection 类的设计
2013/06/21 PHP
php实现递归抓取网页类实例
2015/04/03 PHP
PHP实现的浏览器检查类
2016/04/11 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
2015/02/28 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
Bootstrap教程JS插件滚动监听学习笔记分享
2016/05/18 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
canvas简单快速的实现知乎登录页背景效果
2017/05/08 Javascript
jQuery返回定位插件详解
2017/05/15 jQuery
Vue.js中兄弟组件之间互相传值实例
2017/06/01 Javascript
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
Linux RedHat下安装Python2.7开发环境
2017/05/20 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
python 对象和json互相转换方法
2018/03/22 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
Keras模型转成tensorflow的.pb操作
2020/07/06 Python
美国传奇滑手Paul Rodriguez创办的街头滑板品牌:Primitive Skateboarding
2019/10/29 全球购物
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
迪士尼法国在线商店:shopDisney FR
2020/12/03 全球购物
大学生自我鉴定
2013/12/08 职场文书
应届毕业生自我评价分享
2013/12/15 职场文书
户籍证明的格式
2014/01/13 职场文书
房地产经营管理专业自荐信
2014/09/02 职场文书
工作失误检讨书
2015/01/26 职场文书
安全教育观后感
2015/06/17 职场文书
运动员入场词
2015/07/18 职场文书
关于运动会的宣传稿
2015/07/23 职场文书