Python多線程爬取表情包,1秒下載五十張表情包

從 QQ 到微信,表情包一直都是中國互聯網用戶的「心頭好」.

時至今日,甚至發展到了「無表情包不聊天」的地步。

無論是正事兒還是閒侃,表情包都必不可少。

聊天到一半發現表情包不夠用怎麼辦?今天帶你徹底解決這個問題!

Python多線程爬取表情包,1秒下載五十張表情包

知識點:

  1. requests
  2. css選擇器

開發環境:

  1. 版 本:anaconda5.2.0(python3.6.5)
  2. 編輯器:pycharm

第三方庫:

  1. requests
  2. parsel

進行網頁分析

目標站點.

Python多線程爬取表情包,1秒下載五十張表情包

開發者工具的使用

  • network
  • element
  • concurrent.futures

    Python3.2帶來了 concurrent.futures 模塊,這個模塊具有線程池和進程池、管理並行編程任務、處理非確定性的執行流程、進程/線程同步等功能。

    此模塊由以下部分組成:

    • concurrent.futures.Executor: 這是一個虛擬基類,提供了異步執行的方法。
    • submit(function, argument): 調度函數(可調用的對象)的執行,將 argument 作為參數傳入。
    • map(function, argument): 將 argument 作為參數執行函數,以
      異步 的方式。
    • shutdown(Wait=True): 發出讓執行者釋放所有資源的信號。
    • concurrent.futures.Future: 其中包括函數的異步執行。
    • Future對象是submit任務(即帶有參數的functions)到executor的實例。

    Executor是抽象類,可以通過子類訪問,即線程或進程的 ExecutorPools 。

    因為,線程或進程的實例是依賴於資源的任務,所以最好以“池”的形式將他們組織在一起,作為可以重用的launcher或executor。

    使用線程池

    線程池或進程池是用於在程序中優化和簡化線程/進程的使用。

    通過池,你可以提交任務給executor。

    池由兩部分組成,一部分是內部的隊列,存放著待執行的任務;

    另一部分是一系列的進程或線程,用於執行這些任務。

    池的概念主要目的是為了重用:讓線程或進程在生命週期內可以多次使用。

    它減少了創建創建線程和進程的開銷,提高了程序性能。

    重用不是必須的規則,但它是程序員在應用中使用池的主要原因。

    current.Futures 模塊提供了兩種 Executor 的子類,各自獨立操作一個線程池和一個進程池。

    這兩個子類分別是:

    • concurrent.futures.ThreadPoolExecutor(max_workers)
    • max_workers 參數表示最多有多少個worker並行執行任務。

    下面的示例代碼展示了線程池和進程池的功能。這裡的任務是,給一個list number_list ,包含1到10。

    • 通過有5個worker的線程池執行

    線程池運行

    然後,我們使用了 futures.ThreadPoolExecutor 模塊的線程池跑了一次:

    if name == "main":

    start_time_1 = time.time()

    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:

    for item in number_list:

    executor.submit(evaluate_item, item)

    print("線程池計算的時間:" + str(time.time() - start_time_1), "秒")

    executor1 = concurrent.futures.ThreadPoolExecutor(max_workers=5)

    for item in number_list:

    executor1.submit(evaluate_item, item)

    executor1.shutdown()

    print("線程池計算的時間:" + str(time.time() - start_time_1), "秒")

    ThreadPoolExecutor 使用線程池中的一個線程執行給定的任務。

    池中一共有5個線程,每一個線程從池中取得一個任務然後執行它。

    當任務執行完成,再從池中拿到另一個任務。

    當所有的任務執行完成後,打印出執行用的時間:

    print("線程池計算的時間:" + str(time.time() - start_time_1), "秒")

    最終實現效果:

    Python多線程爬取表情包,1秒下載五十張表情包

    最後小編幫助大家整理了一套python教程,下面展示了部分,希望也能幫助對編程感興趣,想做數據分析,人工智能、爬蟲或者希望從事編程開發的小夥伴,畢竟python工資也還可以,如果能幫到你請點贊、點贊、點贊。

    Python多線程爬取表情包,1秒下載五十張表情包

    Python多線程爬取表情包,1秒下載五十張表情包

    Python多線程爬取表情包,1秒下載五十張表情包

    Python多線程爬取表情包,1秒下載五十張表情包

    Python多線程爬取表情包,1秒下載五十張表情包

    感謝看到末尾的朋友,覺得這篇文章對你有益的話,麻煩點個贊關注多多支持下!


    分享到:


    相關文章: