
本文概要
前言:
本文非常淺顯易懂,可以說是零基礎(chǔ)也可快速掌握。如有疑問,歡迎留言,筆者會第一時間回復(fù)。本文代碼存于github
一、分析表情包網(wǎng)址

進(jìn)入斗圖啦
1、進(jìn)入斗圖啦網(wǎng)址,點擊“最新表情”,再點擊第二、第三頁,得出規(guī)律如下:
第一頁:https://www.doutula.com/photo/list/?page=2
第三頁:https://www.doutula.com/photo/list/?page=3
第四頁:https://www.doutula.com/photo/list/?page=4
可以看出,page 的值跟點擊的頁數(shù)有關(guān),因此,我們就拿到了要爬取的 url
2、打開檢查元素,可以看到html源碼

html源碼
可以看出,每一頁的圖片都在 div 標(biāo)簽里面,然后每一個 a 標(biāo)簽包含一個圖片,

html源碼
我們要取到表情包,就是要取得 a 標(biāo)簽包含的圖片 url,我們可以利用 xpath 語法。
二、實踐
a、獲取 img 標(biāo)簽取到的 img 有 gif 的信息,我們需要過濾掉
imgs = html.xpath("http://div[#class='page-content text-center'//img[@class != 'gif']")
b、接下來是獲取圖片的 url,上面的代碼如下:
for img in imgs:
# print(etree.tostring(img))
img_url = img.get('data-original') # 不知道為什么多個 !data ,去掉它
img_url = img_url.replace("!dta", "")
c、截取后綴,得到文件名,并保存
alt = img.get('alt') # 獲取圖片名字
# alt 可能某些情況下需要處理非法字符(這些字符不可以當(dāng)做名字保存)
suffix = os.path.splitext(img_url)[1] # 對url進(jìn)行分割,取數(shù)組中的第二位,得到后綴名
filename = alt + suffix
request.urlretrieve(img_url, 'images/' + filename) # 保存圖片
這樣下來,就已經(jīng)可以快速保存你所需要的表情包了,論斗圖,誰比得過你

全部代碼如下:
def parse_page(url):
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
response = requests.get(url, headers=headers)
# print(response.text) # 打印html源代碼
html = etree.HTML(response.text)
imgs = html.xpath("http://div[@class='page-content text-center']//img[@class!='gif']")
for img in imgs:
# print(etree.tostring(img))
img_url = img.get('data-original') # 不知道為什么多個 !data ,去掉它
img_url = img_url.replace("!dta", "")
# print(img_url)
alt = img.get('alt') # 獲取圖片名字
# alt 可能某些情況下需要處理非法字符(這些字符不可以當(dāng)做名字保存)
print(alt)
suffix = os.path.splitext(img_url)[1] # 對url進(jìn)行分割,取數(shù)組中的第二位,得到后綴名
filename = alt + suffix
print(filename)
request.urlretrieve(img_url, 'images/' + filename) # 保存圖片
def main():
for x in range(1,51): # # 爬取前50頁 range(1,3) 這里相當(dāng)于 1 2
url = 'https://www.doutula.com/photo/list/?page=%d' % x
parse_page(url)
break
最終結(jié)果:

斗圖.png
區(qū)區(qū)20幾行代碼,就可以造就一個斗圖西方求敗的你,趕快來行動吧!

當(dāng)然,還可以更高級一點,就是利用多線程,異步進(jìn)行爬取、下載,幾秒鐘就可以下載到上千張的表情包!相關(guān)代碼,我也放到了 github ,需要的朋友自行去look look!