1. 程式人生 > >爬取鬥圖網表情包之後鬥圖會輸?不存在的

爬取鬥圖網表情包之後鬥圖會輸?不存在的

本文概要

 

 

前言:

本文非常淺顯易懂,可以說是零基礎也可快速掌握。如有疑問,歡迎留言,筆者會第一時間回覆。

一、分析表情包網址

 

進入鬥圖啦

 

1、進入鬥圖啦網址,點選**“最新表情”**,再點選第二、第三頁,得出規律如下:

 

第一頁:www.doutula.com/photo/list/… 第三頁:www.doutula.com/photo/list/… 第四頁:www.doutula.com/photo/list/…

可以看出,page 的值跟點選的頁數有關,因此,我們就拿到了要爬取的 url

2、開啟檢查元素,可以看到html原始碼

html原始碼

 

可以看出,每一頁的圖片都在 div 標籤裡面,然後每一個 a 標籤包含一個圖片,

 

 

html原始碼

 

我們要取到表情包,就是要取得 a 標籤包含的圖片 url,我們可以利用 xpath 語法。

 

二、實踐

a、獲取 img 標籤取到的 img 有 gif 的資訊,我們需要過濾掉 imgs = html.xpath("//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 可能某些情況下需要處理非法字元(這些字元不可以當做名字儲存)
        suffix = os.path.splitext(img_url)[1] # 對url進行分割,取陣列中的第二位,得到字尾名
        filename = alt + suffix
        request.urlretrieve(img_url, 'images/' + filename) # 儲存圖片

這樣下來,就已經可以快速儲存你所需要的表情包了,論鬥圖,誰比得過你

 

 

全部程式碼如下:

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("//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 可能某些情況下需要處理非法字元(這些字元不可以當做名字儲存)
        print(alt)
        suffix = os.path.splitext(img_url)[1] # 對url進行分割,取陣列中的第二位,得到字尾名
        filename = alt + suffix
        print(filename)
        request.urlretrieve(img_url, 'images/' + filename) # 儲存圖片

def main():
    for x in range(1,51): # # 爬取前50頁 range(1,3) 這裡相當於 1 2
        url = 'https://www.doutula.com/photo/list/?page=%d' % x
        parse_page(url)
        break

最終結果:

鬥圖.png

 

 

區區20幾行程式碼,就可以造就一個鬥圖西方求敗的你,趕快來行動吧!

 

 

當然,還可以更高階一點,就是利用多執行緒,非同步進行爬取、下載,幾秒鐘就可以下載到上千張的表情包!