本人現階段尚在學習階段,參考學習鏈接如下,部分代碼可能存在相同
代碼使用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)
執行效果截圖如下:
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。