本人現階段尚在學習階段,參考學習鏈接如下,部分代碼可能存在相同

代碼使用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)



執行效果截圖如下:

python QQ空間圖片_json


python QQ空間圖片_#python_02