欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python爬蟲中多線程的使用詳解

 更新時(shí)間:2019年09月23日 13:55:48   作者:記住我忘記我  
queue是python的標(biāo)準(zhǔn)庫(kù),俗稱隊(duì)列.可以直接import引用,在python2.x中,模塊名為Queue。這篇文章主要介紹了python爬蟲中多線程的使用,需要的朋友可以參考下

queue介紹

queue是python的標(biāo)準(zhǔn)庫(kù),俗稱隊(duì)列.可以直接import引用,在python2.x中,模塊名為Queue。python3直接queue即可

在python中,多個(gè)線程之間的數(shù)據(jù)是共享的,多個(gè)線程進(jìn)行數(shù)據(jù)交換的時(shí)候,不能夠保證數(shù)據(jù)的安全性和一致性,所以當(dāng)多個(gè)線程需要進(jìn)行數(shù)據(jù)交換的時(shí)候,隊(duì)列就出現(xiàn)了,隊(duì)列可以完美解決線程間的數(shù)據(jù)交換,保證線程間數(shù)據(jù)的安全性和一致性。

#多線程實(shí)戰(zhàn)栗子(糗百)
#用一個(gè)隊(duì)列Queue對(duì)象,
#先產(chǎn)生所有url,put進(jìn)隊(duì)列;
#開啟多線程,把queue隊(duì)列作為參數(shù)傳入
#主函數(shù)中讀取url
import requests
from queue import Queue
import re,os,threading,time
# 構(gòu)造所有ip地址并添加進(jìn)queue隊(duì)列
headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}
urlQueue = Queue()
[urlQueue.put('http://www.qiumeimei.com/image/page/{}'.format(i)) for i in range(1,14)]
def get_image(urlQueue):
  while True:
    try:
      # 不阻塞的讀取隊(duì)列數(shù)據(jù)
      url = urlQueue.get_nowait()
      # i = urlQueue.qsize()
    except Exception as e:
      break
    print('Current Thread Name %s, Url: %s ' % (threading.currentThread().name, url))
    try:
      res = requests.get(url, headers=headers)
      url_infos = re.findall('data-lazy-src="(.*?)"', res.text, re.S)
      for url_info in url_infos:
        if os.path.exists(img_path + url_info[-20:]):
          print('圖片已存在')
        else:
          image = requests.get(url_info, headers=headers)
          with open(img_path + url_info[-20:], 'wb') as fp:
            time.sleep(1)
            fp.write(image.content)
          print('正在下載:' + url_info)
    except Exception as e:
      print(e)
if __name__ == '__main__':
  startTime = time.time()
  # 定義圖片存儲(chǔ)路徑
  img_path = './img/'
  if not os.path.exists(img_path):
    os.mkdir(img_path)
  threads = []
  # 可以調(diào)節(jié)線程數(shù), 進(jìn)而控制抓取速度
  threadNum = 4
  for i in range(0, threadNum):
    t = threading.Thread(target=get_image, args=(urlQueue,))
    threads.append(t)
  for t in threads:
    t.start()
  for t in threads:
    # 多線程多join的情況下,依次執(zhí)行各線程的join方法, 這樣可以確保主線程最后退出, 且各個(gè)線程間沒(méi)有阻塞
    t.join()
  endTime = time.time()
  print('Done, Time cost: %s ' % (endTime - startTime))

總結(jié)

以上所述是小編給大家介紹的python爬蟲中多線程的使用詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • 解析Python擴(kuò)展模塊的加速方案

    解析Python擴(kuò)展模塊的加速方案

    這章我們來(lái)介紹Python的擴(kuò)展名之ctypes,教大家認(rèn)識(shí)ctypes,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-09-09
  • Python實(shí)現(xiàn)調(diào)用jar或執(zhí)行java代碼的方法詳解

    Python實(shí)現(xiàn)調(diào)用jar或執(zhí)行java代碼的方法詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)調(diào)用jar或執(zhí)行java代碼的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 基于python pygame實(shí)現(xiàn)的兔子吃月餅小游戲

    基于python pygame實(shí)現(xiàn)的兔子吃月餅小游戲

    pygame是用來(lái)開發(fā)游戲的一套基于SDL的模板,它可以是python創(chuàng)建完全界面化的游戲和多媒體程序,而且它基本上可以在任何系統(tǒng)上運(yùn)行,這篇文章主要給大家介紹了基于python pygame實(shí)現(xiàn)的兔子吃月餅小游戲的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Python學(xué)習(xí)之自定義異常詳解

    Python學(xué)習(xí)之自定義異常詳解

    這篇文章主要為大家介紹了Python中如何自定義異常,以及自定義拋出異常的關(guān)鍵字—raise的用法,文中示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-03-03
  • Anaconda配置pytorch-gpu虛擬環(huán)境的圖文教程

    Anaconda配置pytorch-gpu虛擬環(huán)境的圖文教程

    這篇文章主要介紹了Anaconda配置pytorch-gpu虛擬環(huán)境步驟整理,本文分步驟通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python中利用sorted()函數(shù)排序的簡(jiǎn)單教程

    Python中利用sorted()函數(shù)排序的簡(jiǎn)單教程

    這篇文章主要介紹了Python中利用sorted()函數(shù)排序的簡(jiǎn)單教程,sorted()函數(shù)有返回值,在Python的排序?qū)崿F(xiàn)中發(fā)揮著相當(dāng)重要的作用,需要的朋友可以參考下
    2015-04-04
  • python實(shí)點(diǎn)云分割k-means(sklearn)詳解

    python實(shí)點(diǎn)云分割k-means(sklearn)詳解

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)點(diǎn)云分割k-means,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 如何在 Matplotlib 中更改繪圖背景的實(shí)現(xiàn)

    如何在 Matplotlib 中更改繪圖背景的實(shí)現(xiàn)

    這篇文章主要介紹了如何在 Matplotlib 中更改繪圖背景的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • PYQT5 實(shí)現(xiàn)界面的嵌套方式

    PYQT5 實(shí)現(xiàn)界面的嵌套方式

    這篇文章主要介紹了PYQT5 實(shí)現(xiàn)界面的嵌套方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Python Image模塊基本圖像處理操作小結(jié)

    Python Image模塊基本圖像處理操作小結(jié)

    這篇文章主要介紹了Python Image模塊基本圖像處理操作,結(jié)合實(shí)例形式總結(jié)分析了Python圖形處理模塊Image常用的圖形處理函數(shù)、功能及相關(guān)使用技巧,需要的朋友可以參考下
    2019-04-04

最新評(píng)論