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 相关文章推荐
利用QT写一个极简单的图形化Python闹钟程序
Apr 07 Python
linux环境下python中MySQLdb模块的安装方法
Jun 16 Python
对python列表里的字典元素去重方法详解
Jan 21 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
Jun 11 Python
基于python的Paxos算法实现
Jul 03 Python
python 字典的打印实现
Sep 26 Python
Python实现元素等待代码实例
Nov 11 Python
基于Python实现2种反转链表方法代码实例
Jul 06 Python
python打包多类型文件的操作方法
Sep 21 Python
Python Sqlalchemy如何实现select for update
Oct 12 Python
python图片合成的示例
Nov 09 Python
教你用python实现12306余票查询
Jun 30 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程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
javascript document.images实例
2008/05/27 Javascript
jQuery 操作XML入门
2008/12/25 Javascript
javascript 处理null及null值示例
2014/06/09 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
实例讲解JS中setTimeout()的用法
2016/01/28 Javascript
jquery跟随屏幕滚动效果的实现代码
2016/04/13 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
Layui数据表格跳转到指定页的实现方法
2019/09/05 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
python从ftp下载数据保存实例
2013/11/20 Python
简单的通用表达式求10乘阶示例
2014/03/03 Python
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
python实现批量修改服务器密码的方法
2019/08/13 Python
pygame实现打字游戏
2021/02/19 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
python zip()函数的使用示例
2020/09/23 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
请说出你所知道的线程同步的方法
2013/04/19 面试题
服务员自我评价
2014/01/25 职场文书
党员公开承诺事项
2014/03/25 职场文书
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书
使用Redis实现秒杀功能的简单方法
2021/05/08 Redis
Python使用Web框架Flask开发项目
2022/06/01 Python