Python資料爬蟲學習筆記(11)爬取千圖網圖片資料

Zhengyh@Smart3S發表於2018-09-18

  需求:在千圖網http://www.58pic.com中的某一板塊中,將一定頁數的高清圖片素材爬取到一個指定的資料夾中。

  分析:以數碼電器板塊為例

  1.檢視該板塊的每一頁的URL:

注意到第一頁是“0-1.html”,第二頁是“0-2.html”,由此可找到規律。

2.檢視縮圖片的URL,使用F12開發者工具,通過element選項卡中的工具對網頁div進行不斷展開,找到圖片真正的地址:

例如:

3.檢視高清圖的URL:進入圖片詳情介面,直接右鍵點選圖片檢視圖片地址,如:

為:

比較縮圖與高清圖的URL對應關係,即可得出結論,高清圖URL=至“.jpg!”的縮圖URL+“一陀程式碼”

4.編寫程式碼:

import urllib.request
import re
import urllib.error
for i in range(1,10):
    pageurl="http://www.58pic.com/piccate/3-151-615-default-0_2_0_0_default_0-"+str(i)+".html"
    data=urllib.request.urlopen(pageurl).read().decode("utf-8","ignore")
    pat='</div></div><img  src="(.*?)qt'
    imglist=re.compile(pat).findall(data)
    for j in range(0,len(imglist)):
        try:
            thisimg=imglist[j]+"/fw/1024/watermark/url/L2ltYWdlcy93YXRlcm1hcmsvZGF0dS5wbmc=/repeat/true/crop/0x1024a0a0"
            #被網站強行裁剪的一小部分
            #thisimg=imglist[j]+"/fw/1024/watermark/url/L2ltYWdlcy93YXRlcm1hcmsvZGF0dS5wbmc=/repeat/true/crop/0x1024a0a1024"
            file="F:/result/"+str(i)+str(j)+".jpg"
            urllib.request.urlretrieve(thisimg,filename=file)
            print("第"+str(i)+"頁第"+str(j)+"個圖片爬取成功")
        except urllib.error.URLError as e:
            if hasattr(e,"code"):
                print(e.code)
            if hasattr(e,"reason"):
                print(e.reason)
        except Exception as e:
            print(e)

遇到的問題:

1)千圖網需登入才能看到高清大圖的URL。

2)千圖網為對高清大圖進行了裁剪,可能分為了多個小部分圖片。

3)檢視網頁原始碼的縮圖URL與Python爬取的URL可能會不一致,具體原因可能是因為登入導致的。

結果:

 

相關文章