利用Python爬蟲爬取淘寶網某類商品的圖片


這是跟着韋偉老師的Python數據分析課程做的爬蟲實戰項目,在這里記錄下來,也方便學習分享。

2018-01-28 完成項目:

利用Python爬蟲爬取淘寶網某類商品的圖片

 

******Step1******

以連衣裙為例,觀察淘寶網連衣裙商品第1頁、第2頁、第3頁……網址的規律:

https://s.taobao.com/search?q=連衣裙&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=4&ntoffset=4&p4ppushleft=1%2C48&s=0

 

https://s.taobao.com/search?q=連衣裙&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=4&ntoffset=4&p4ppushleft=1%2C48&s=44

 

https://s.taobao.com/search?q=搜索詞&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=4&ntoffset=4&p4ppushleft=1%2C48&s=88

 

因此,不難發現出規律,q=后面接搜索詞,s=(頁數-1)*44

 

import urllib.request

import re

keyname="連衣裙"

key=urllib.request.quote(keyname)

for i in range(0,15):

    url="https://s.taobao.com/search?q="+key+"&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=4&ntoffset=4&p4ppushleft=1%2C48&s="+str(i*44)

    data=urllib.request.urlopen(url).read().decode("utf-8","ignore")

 

先嘗試上述代碼的運行,若沒報錯誤說明可以讀取到相應搜索詞的網頁,則可進行下一步。

 

****Step2****

接着在網頁中查看源代碼,找出高清大圖的網址,並構造其正則表達式:

我們先在第一頁右鍵單擊某張圖片,復制其圖片地址:

https://gsearch2.alicdn.com/img/bao/uploaded/i4/i1/1985598030/TB1vTPZnL6H8KJjy0FjXXaXepXa_!!0-item_pic.jpg_230x230.jpg_.webp

打開該地址,發現是縮略圖,並不是我們想要的高清圖片。

通過與其他縮略圖的網址相比較后,我們發現該網址中的TB1vTPZnL6H8KJjy0FjXXaXepXa為關鍵字符串,因此我們以此為關鍵字進行查找,仍顯示沒找到;我們將關鍵字縮短,最終發現,以“TB”為關鍵字,可以找到數十個類似以下格式的圖片地址:

"pic_url":"//gsearch2.alicdn.com/img/bao/uploaded/i4/i2/1763644554/TB1VVVPocrI8KJjy0FhXXbfnpXa_!!0-item_pic.jpg"

 

我們將其打開,發現正是我們要找的高清大圖的圖片網址!

因此,我們構建出圖片地址的正則表達式:

"pic_url":"//(.*?)"

 

接着step1的代碼:

    pat='"pic_url":"//(.*?)"'

    imagelist=re.compile(pat).findall(data)

    for j in range(0,len(imagelist)):

        img=imagelist[j]

        imgurl="http://"+img

        file="F:/數據分析教程/result/taobao/"+str(i)+str(j)+".jpg"

        urllib.request.urlretrieve(imgurl,filename=file)

 

運行代碼,沒有報錯,在python shell中輸入imagelist查看是否成功:

部分結果如上圖,以列表形式存儲的,正常來說是成功的,再回到代碼中設置的F:/數據分析教程/result/taobao/目錄下,發現圖片都存放其中,並以ij.jpg命名。

 

  點擊其中某一張,確定是高清大圖,項目實驗成功!

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM