爬取鬥圖網表情包之後鬥圖會輸?不存在的
阿新 • • 發佈:2018-12-13
前言:
本文非常淺顯易懂,可以說是零基礎也可快速掌握。如有疑問,歡迎留言,筆者會第一時間回覆。
一、分析表情包網址
1、進入鬥圖啦網址,點選**“最新表情”**,再點選第二、第三頁,得出規律如下:
第一頁:www.doutula.com/photo/list/… 第三頁:www.doutula.com/photo/list/… 第四頁:www.doutula.com/photo/list/…
可以看出,page 的值跟點選的頁數有關,因此,我們就拿到了要爬取的 url
2、開啟檢查元素,可以看到html原始碼
可以看出,每一頁的圖片都在 div 標籤裡面,然後每一個 a 標籤包含一個圖片,
我們要取到表情包,就是要取得 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
最終結果:
區區20幾行程式碼,就可以造就一個鬥圖西方求敗的你,趕快來行動吧!
當然,還可以更高階一點,就是利用多執行緒,非同步進行爬取、下載,幾秒鐘就可以下載到上千張的表情包!