一篇文章教會你利用Python網絡爬蟲成爲鬥圖達人

【一、項目背景】

你是否在尋找可以與高手鬥圖的應用? 你是否在尋找可以自制表情的應用?你是否在尋找最全、最爆笑的表情庫?

鬥圖網是一個收集了成千上萬的撕逼鬥圖表情包,在這裏你可以快速找到想要的表情, 更好的“鬥圖”,助您成爲真正的鬥圖終結者!

【二、項目目標】

下載表情包,保存文檔。

【三、涉及的庫和網站】

1、網址如下:

https://www.doutula.com/photo/list/?page={}

2、涉及的庫:requests****、lxml、ssl****、time

3、軟件:PyCharm

【四、項目分析】

1、如何找到表情包圖片地址?

F12右鍵檢查,找到對應的圖片的地址。

觀察網址的變化(一般取前三頁):

https://www.doutula.com/photo/list/?page=1
https://www.doutula.com/photo/list/?page=2
https://www.doutula.com/photo/list/?page=3

發現點擊下一頁時,page{}每增加一頁自增加1,用{}代替變換的變量,再用for循環遍歷這網址,實現多個網址請求。

2. 如何解除ssl驗證?

因爲這個網址是https,需要導入一個ssl模塊,忽略ssl驗證。

3. ****如何獲取Cookie?

右鍵檢查,找到NetWork,隨便複製一個Cookie即可。

【五、項目實施】

1、我們定義一個class類繼承object,然後定義init方法繼承self,再定義一個主函數main繼承self。導入需要的庫。

import requests
from lxml import etree
from fake_useragent import UserAgent
import ssl  # ssl驗證
import time

ssl._create_default_https_context = ssl._create_unverified_context

class  Emoticon(object):
    def __init__(self):
        pass
    def main(self):
        pass

if __name__ == '__main__': 
    spider = Emoticon()
    spider.main()

2、導入網址和構造請求頭,防止反爬。

 def __init__(self):
        self.headers = {'User-Agent': 'Mozilla/5.0'}
        self.url = 'https://www.doutula.com/photo/list/?page={}'

3、發送請求 ,獲取響應,頁面回調,方便下次請求。

 def get_page(self, url):
        res = requests.get(url=url, headers=self.headers)
        html = res.content.decode("utf-8")
        return html

4、xpath解析頁面。

這裏我們先獲取父節點,在通過for循環遍歷,找到對應的子節點(圖片地址)。

  image = parse_html.xpath('//ul[@class="list-group"]/li/div/div//a')
  for i in image:
      image_src_list = i.xpath('.//img/@data-original')[0]
      image_name = i.xpath('.//img//@alt')[0]

運行的結果:

5、對圖片地址發生請求,取對應圖片地址後10位,作爲圖片的命名,寫入文件(每一張圖片的後綴名不一樣,所有這裏不採用image_name作爲圖片的命名)。

 html2 = requests.get(url=image_src_list, headers=self.headers).content
  name = "/圖/" + image_src_list[-20:]
  #print(name[-10:])
  with open(name[-10:], 'wb') as f:
      f.write(html2)
      print("%s 【下載成功!!!!】" % image_name)
      print("==================================")

6、調用方法,實現功能。

   html = self.get_page(url)
   self.parse_page(html)
           print("======================第%s頁爬取成功!!!!=======================" % page)

7、time模塊打出執行時間。

 start = time.time()
  end = time.time()
  print('執行時間:%.2f' % (end - start))

【六、效果展示】

1、點擊綠色小三角運行輸入起始頁,終止頁。

2、將下載成功信息顯示在控制檯。

3、保存文檔,在本地可以看到鬥圖。

【七、總結】

1、不建議抓取太多數據,容易對服務器造成負載,淺嘗輒止即可。

2、本文基於Python網絡爬蟲,利用爬蟲庫,獲取表情包,存入文檔。

3、希望通過這個項目能夠了解到,對於HTTPS網站,解除ssl驗證的有大致的瞭解。

4、可以嘗試的去爬取其他的分類的表情包,按照步驟去實現,實現的時候,總會有各種各樣的問題,切勿眼高手低,勤動手,纔可以理解的更加深刻。

5、需要本文源碼的小夥伴,後臺回覆“鬥圖達人”四個字,即可獲取。

想要學習更多,請前往Python爬蟲與數據挖掘專用網站:http://pdcfighting.com/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章