1. 程式人生 > >python爬蟲爬取鬥圖網 最新表情包(第二篇)

python爬蟲爬取鬥圖網 最新表情包(第二篇)

上一篇文章爬的表情包是套圖,發現還有一千多頁的最新表情包。兩者的網頁結構有點區別,程式碼需要整改下,看下頁面,規律也比較好找。
非常氣憤,上一個部落格被其他爬走了,還是一個培訓機構,插了自己的廣告!
這裡寫圖片描述
所有的表情圖片都是在標籤下,數了一下每一頁都是17行,一行4個,不管多少個,我都提取放到一個列表,然後分別下載。一千多頁,雖然沒用多執行緒,爬了一下大概也就花了20多分鐘。因為網頁並不是千篇一律的,幾百頁後頁面結構就有些變化了,為了保證動圖和非動圖的效果,爬了幾十頁和幾百頁後又修改了原始碼
裡面也加了對格式的很多判斷,因為剛開始爬的時候,沒注意可能幾百頁後連結啥的出現了變化。還是一樣的,跟上一篇部落格一樣,表情圖片必須帶名字,要不然沒法鬥圖。。

#coding=utf8
import requests
from lxml import etree
from urllib import request
import time

headers = {}
headers["User-Agent"] = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0"
headers["Host"] = "www.doutula.com"
headers["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
headers["Accept-Language"] = "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2" headers["Accept-Encoding"] = "gzip, deflate" headers["Connection"] = "close" headers["Upgrade-Insecure-Requests"] = "1" def get_img(page): global j url = "http://www.doutula.com/photo/list/?page=" + str(page) try
: response = requests.get(url,headers=headers) html = response.text except Exception as e: print(str(e)) selector = etree.HTML(html) img_url = selector.xpath('//img[@style="width: 100%; height: 100%;"][1]/@data-original') img_name = selector.xpath('//img[@style="width: 100%; height: 100%;"][1]/@alt') for img_link in img_url: id = img_url.index(img_link) try: if img_link[-3:]=="dta": if img_link[-7:-4]=="gif": request.urlretrieve(img_link, 'F:\\images\\%s.gif' % img_name[id]) else: if img_link[-7:-4]=="png": request.urlretrieve(img_link, 'F:\\images\\%s.png' % img_name[id]) else: request.urlretrieve(img_link, 'F:\\images\\%s.jpg' % img_name[id]) print("下載第%d張表情包:"%j + img_link) else: if img_link[-3:]=="jpg": request.urlretrieve(img_link, 'F:\\images\\%s.jpg' % img_name[id]) else: if img_link[-3:]=="png": request.urlretrieve(img_link, 'F:\\images\\%s.png' % img_name[id]) else: request.urlretrieve(img_link, 'F:\\images\\%s.gif' % img_name[id]) print("下載第%d張表情包:"%j + img_link) except Exception as e: print(str(e)) j += 1 j = 1 for page in range(1,1396): print("第" + str(page) + "頁") try: get_img(page) except Exception as e: print(str(e))

看看效果咋樣:
這裡寫圖片描述
一千多頁爬下來,大概有7萬個表情包,因為我給表情包命名字了,而有些表情包網頁上的名字有特殊字元,Windows下面特殊字元不能作為檔名字,所以部分表情包儲存失敗了,反正也不缺這幾個了。
這裡寫圖片描述
加上上一篇文章爬的,除去名字有特殊字元的,總共表情包就這麼些了,4個G多,11萬個。
這裡寫圖片描述