python爬虫学习之路(2)_ 淘宝淘女郎相册打包下载

淘宝现阶段的淘女郎相册无须登录,省了好多麻烦,如果需要登录,请看本系列第一篇文章

本人现阶段尚在学习阶段,参考学习链接如下,部分代码可能存在相同,可以参考:http://cuiqingcai.com/1001.html

代码使用python2.7,如果用的是python3.0版本,使用的类库可能需要自行更改!!!


# coding: utf-8
import re
import urllib
import urllib2
import os
import cookielib

'''
https://mm.taobao.com/json/request_top_list.htm?page=3 初始访问页
https://mm.taobao.com/self/model_card.htm?user_id=539549300&is_coment=false	索引页个人跳转链接
https://mm.taobao.com/self/model_info.htm?user_id=539549300&is_coment=false	个人主页链接
https://mm.taobao.com/self/model_album.htm?user_id=440678454&is_coment=false	个人相册链接
https://mm.taobao.com/self/album/open_album_list.htm?_charset=utf-8&user_id =440678454&page=1	ajax请求返回的数据页面
'''


class Spider:
    # 一些初始化参数配置
    def __init__(self):
        # 请求路径基本前缀
        self.siteURL = 'http://mm.taobao.com/json/request_top_list.htm'
        # 网页请求头信息
        self.userAgent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0'
        self.headers = {'User-Agent':self.userAgent}

    # 获取索引页面,由基本的请求路径 + 请求参数(page)
    # https://mm.taobao.com/json/request_top_list.htm?page=3
    # 返回页面的gbk编码代码
    def getPage(self,pageIndex):
        url = self.siteURL + '?page=' + str(pageIndex)
        request = urllib2.Request(url,headers = self.headers)
        response = urllib2.urlopen(request)
        return response.read().decode('gbk')

    # 创建图片存储的对应文件夹
    def mkPicDir(self, path):
        path = path.strip()
        # 判断路径是否存在
        # 存在     True
        # 不存在   False
        isExists = os.path.exists(path)
        # 判断结果
        if not isExists:
            # 如果不存在则创建目录
            print u"系统偷偷新建了名字叫做", path, u'的文件夹'
            # 创建目录操作函数
            os.makedirs(path)
            return True
        else:
            # 如果目录存在则不创建,并提示目录已存在
            print u"名为", path, '的文件夹已经创建成功'
            return False

    # 获取模特个人信息页全部内容
    def getModelPage(self,url):
        request = urllib2.Request(url,headers=self.headers)
        response = urllib2.urlopen(request)
        return response.read().decode('gbk')

   # 下载图片并保存到本地
    def saveImage(self, url, name, number):
        filename = 'e:/pics/' + name + '/' + str(number) + '.jpg'
        try:
            print u"正在悄悄的保存她的一张图片", filename
            u = urllib.urlopen('https:'+url)
            data = u.read()
            f = open(filename, 'wb')
            f.write(data)
            f.close()
        except Exception,e:
            print e

    # 页面图片匹配
    def matchPics(self,mmpage,name,photoPage):
        # 匹配出页面中所有图片链接
        pattern = re.compile('<div class="mm-photo-cell"(.*?)<div class="mm-photo-cell-middle">.*?<img'
                             + ' src="(.*?)".*?</a>', re.S)
        pics = re.findall(pattern,mmpage)
        # 自增数字,做图片名
        number = 1
        for pic in pics:
            try:
                self.saveImage(pic[1],name,number+(photoPage-1)*12)
                number += 1
            except urllib2.URLError,e:
                print u"一张图片失效",name

    # 获取每个模特共有几页的展示相册
    def getPageTotal(self, mmPage):
        pattern = re.compile('<input name="totalPage".*?value="(.*?)"', re.S)
        number = re.findall(pattern, mmPage)
        return int(number[0])

    # 使用正则表达式解析索引页面
    # 获取页面中对应的个人资料信息
    # pageStart(开始页) pageEnd(结束页)
    def getContents(self, pageStart, pageEnd):
        # 循环指定的信息页,处理所有页
        for pageIndex in range(pageStart, pageEnd, 1):
            page = self.getPage(pageIndex)
            # 页面代码条件匹配出所有符合条件的内容
            pattern = re.compile('<div class="list-item".*?lady-name.*?href=".*?user_id=(.*?)".*?>(.*?)</a>.*?'
                                 , re.S)
            # 存储所有匹配出的内容
            items = re.findall(pattern, page)
            for item in items:
                # 依据用户名链接与相册链接间的联系,直接修改链接并跳转到相册信息  card改为album
                mmpage = self.getModelPage('https://mm.taobao.com/self/album/open_album_list.htm?_charset'
                                           + '=utf-8&user_id=' + item[0] )
                # 获取该模特相册总共有几页
                number = self.getPageTotal(mmpage)

                # 创建对应文件夹
                self.mkPicDir('e:/pics/' + item[1] + '/')
                for photoPage in range(1, number, 1):
                    mpage = self.getModelPage('https://mm.taobao.com/self/album/open_album_list.htm?_charset'
                                                   + '=utf-8&user_id=' + item[0] + '&page=' + str(photoPage))
                    # 页面中的图片链接匹配并下载
                    self.matchPics(mpage, item[1],photoPage)

spider = Spider()
spider.getContents(6,7)


执行效果截图如下:



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值