1. 程式人生 > >第一個python爬蟲——保存淘寶mm圖片

第一個python爬蟲——保存淘寶mm圖片

gen with open 代號 [] 文件夾 暫時 觀察 python基礎 意義

第一次算是成功的爬蟲小代碼,花了挺長時間的。
目的:
  獲取淘寶mm圖片
現存問題:
  無法獲取動態加載的圖片,只能得到打開網頁後存在的圖片
  雖然更換代理仍禁止訪問
收獲:
  
 對爬蟲的思路相對來說更清晰了——想爬什麽,這東西有什麽規律,怎麽體現在網頁上的,如何抓取

  增強了對python基礎知識的掌握 1,文件寫入的方法 2,json被加載時所需要的條件 3,列表,元組,字典
                  4,網絡請求的基本操作 5,基礎的應對反爬機制的方法
  


  


1
import json 2 import urllib.response 3 import urllib.request
4 import re 5 import random 6 from json import loads 7 import os 8 9 #請求頭數組 10 headerstr = ‘‘‘Mozilla/5.0(Macintosh;IntelMacOSX10.6;rv:2.0.1)Gecko/20100101Firefox/4.0.1 11 Opera/9.80(Macintosh;IntelMacOSX10.6.8;U;en)Presto/2.8.131Version/11.11 12 Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;360SE)
‘‘‘ 13 #獲取請求頭 14 def headers(): 15 header = headerstr.split(\n) 16 length = len(header) 17 return header[random.randint(0,length-1)] 18 19 #返回基本信息和user_id 20 def getUrlList(): 21 req = urllib.request.Request(https://mm.taobao.com/tstar/search/tstar_model.do?_input_charset=utf-8
) 22 req.add_header(User-Agent, headers()) 23 html = urllib.request.urlopen(req).read().decode(gbk) 24 25 #加載json,html解碼後才能加載到json中 26 # 註:目前只知道{}內的可以轉成json,其余情況未知 27 # 註:[]是列表,()是元組,{}是字典 28 json = loads(html) 29 30 return json[data][searchDOList] 31 32 33 #獲取mm相冊的代號所在的url 34 def getAlbumCode(userId): 35 req = urllib.request.Request(https://mm.taobao.com/self/album/open_album_list.htm?_charset=utf-8&user_id%%20=%s % userId) 36 req.add_header(User-Agent, headers()) 37 html = urllib.request.urlopen(req).read().decode(gbk) 38 reg = rclass="mm-first" href="//(.*?)" 39 40 return re.findall(reg, html)[::2] 41 42 43 #獲取mm相冊的代號 44 def getAlbumInner(code): 45 reg = \d+ 46 result= re.findall(reg,code) 47 return result[1] 48 49 50 #獲取圖片地址並保存圖片到個人文件夾 51 def getpic(userId,album_id,Album_num,content): 52 #因為下滑可以加載圖片,準備將page=1,2,3...的情況做出來,但目前而言由於未知的錯誤而無法進入page=2的情況,所以暫時擱淺,只選了page=1的情況 53 #這裏的page無多少意義,可以忽略 54 page=1 55 56 #index表示下面for循環中在json[‘picList‘]的列表中每個元素的指針 57 index = 0 58 59 req = urllib.request.Request(https://mm.taobao.com/album/json/get_album_photo_list.htm?user_id=%s&album_id=%s&page=1%(userId,album_id)) 60 req.add_header(User-Agent, headers()) 61 html = urllib.request.urlopen(req,timeout=5).read( 62 ).decode(gbk) 63 json = loads(html) 64 65 #json[‘picList‘]是一個列表,要通過循環遍歷出來每個元素 66 for it in json[picList]: 67 index += 1 68 69 #通過比較url發現大圖與小圖之間的差距在於290與620,所以直接替換就可以啦 70 picUrl=re.sub(290,620,it[picUrl]) 71 72 #獲得的url無法直接寫入文件,觀察後發現直接加http:就行了 73 pic = http:+picUrl 74 75 #open打開的是將要寫入的文件的絕對路徑或者說是相對路徑 76 contex = urllib.request.urlopen(pic).read() 77 with open(content+"\\"+str(Album_num)+-+str(page)+-+str(index)+".jpg",wb) as f: 78 79 f.write(contex) 80 81 #先加個代理 82 proxy_support = urllib.request.ProxyHandler({http: 124.93.87.140:80}) 83 opener = urllib.request.build_opener(proxy_support) 84 urllib.request.install_opener(opener) 85 86 json = getUrlList() 87 for i in json: 88 userId = i[userId] 89 realName = i[realName] 90 city = i[city] 91 height = i[height] 92 weight = i[weight] 93 print (u發現一位美女,她的名字叫: +realName, 身高:+height + m,體重:+ weight + kg,u她現在的居住在- + city) 94 # 根據mm名字創建文件夾 95 content = E:\\demo\\ + realName 96 if not os.path.exists(content): 97 os.mkdir(content) 98 print(正在為+realName+創建文件夾...) 99 #mm的第Album_num個相冊 100 Album_num = 0 101 print(正在為你悄咪咪的保存她的圖片...) 102 for j in getAlbumCode(userId): 103 code = j 104 album_id=getAlbumInner(code) 105 Album_num+=1 106 getpic(userId, album_id, Album_num,content) 107 print(realName+的圖片已經保存成功啦!)

第一個python爬蟲——保存淘寶mm圖片