獲取淘寶MM的所有用戶主頁的圖片。以下是代碼(包含註釋),運行環境是win、python2.7.10:
#coding:GBK
import requests
import json,re
from lxml import etree
import urllib
import os
def get_totalpage():
'''獲取所有頁面總數'''
url = "http://mm.taobao.com/tstar/search/tstar_model.do?_input_charset=utf-8&q=&viewFlag=A&sortType=default&searchStyle=&searchRegion=city%3A&searchFansNum=¤tPage=1&pageSize=100"
html = requests.post(url).content.decode('gbk')
html = json.loads(html)['data']
totalPage = html['totalPage']
return totalPage
def get_info(page):
'''獲取前page頁MM的數據:包括姓名、uid、主頁url(其他所在城市、身高、體重、粉絲等這裏就不提取了)'''
totalPage=get_totalpage()
if page>totalPage or type(page)!=int or type(totalPage)!=int:
print u'請輸入1~'+str(totalPage)+u'的整數'
else:
print u'檢測到總共有'+str(totalPage)+u'頁'
print u'---------------------------'
realName = []
userId = []
userurl = []
for p in range(1,page+1):
url = 'http://mm.taobao.com/tstar/search/tstar_model.do?_input_charset=utf-8&q=&viewFlag=A&sortType=default&searchStyle=&searchRegion=city%3A&searchFansNum=¤tPage='+str(p)+'&pageSize=100'
html = requests.post(url).content.decode('gbk')
html = json.loads(html)['data']['searchDOList']
for data in html:
Name = data['realName'] #真實姓名
Id = data['userId'] #用戶ID
url = 'https://mm.taobao.com/self/aiShow.htm?userId='+str(Id) #個人主頁
realName.append(Name)
userId.append(Id)
userurl.append(url)
print str(p)+'/'+str(totalPage),u'獲取成功......'
return userId,realName,userurl
def get_img(url):
'''返回包含淘寶MM主頁的所有圖片url的一個列表'''
html = requests.get(url).content.decode('GBK')
html = etree.HTML(html)
src = html.xpath('//div[@class="mm-aixiu-content"]//img/@src')
img = []
for i in src:
jpg = 'https:'+i
if re.findall('(.*?).jpg',jpg)!=[]:
img.append(jpg)
img = list(set(img)) #去除重複url地址
return img
#----------------------------------------------------------------------------------
print u'''
* * * * * * * * * * *
* 名稱:獲取淘寶MM圖片
* 作者:song
* 版本:1.0
* * * * * * * * * * *
'''
totalpage = get_totalpage() #獲取總頁數(我寫這個爬蟲時有399頁,每頁有100個用戶,差不多有39900個用戶)
uid,uname,url = get_info(totalpage) #獲取所有頁面的個人信息(主要是獲取個人主頁url、用戶名)
#遍歷列表url,獲取所有用戶圖片
for i in range(len(url)):
img = get_img(url[i])
#判斷文件夾是否存在,如果不存在則新建一個文件夾
path = 'D:/taobao/'+uname[i]+'/'
if os.path.exists(path)!=True:
os.makedirs(path)
#下載圖片到剛剛創建的目錄(我這裏指定到D:/taobao/下,每一個人單獨一個文件夾)
for j in range(len(img)):
urllib.urlretrieve(img[j],path+str(j+1)+'.jpg')
print uname[i],str(j+1)+'/'+str(len(img)),img[j]
以下是部分下載的圖片:
歡迎訪問我的個人站點:http://bgods.cn/