日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python爬虫多线程是什么意思_python爬虫中多线程的使用详解

發布時間:2024/9/15 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬虫多线程是什么意思_python爬虫中多线程的使用详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

queue介紹

queue是python的標準庫,俗稱隊列.可以直接import引用,在python2.x中,模塊名為Queue。python3直接queue即可

在python中,多個線程之間的數據是共享的,多個線程進行數據交換的時候,不能夠保證數據的安全性和一致性,所以當多個線程需要進行數據交換的時候,隊列就出現了,隊列可以完美解決線程間的數據交換,保證線程間數據的安全性和一致性。

#多線程實戰栗子(糗百)

#用一個隊列Queue對象,

#先產生所有url,put進隊列;

#開啟多線程,把queue隊列作為參數傳入

#主函數中讀取url

import requests

from queue import Queue

import re,os,threading,time

# 構造所有ip地址并添加進queue隊列

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:

# 不阻塞的讀取隊列數據

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()

# 定義圖片存儲路徑

img_path = './img/'

if not os.path.exists(img_path):

os.mkdir(img_path)

threads = []

# 可以調節線程數, 進而控制抓取速度

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的情況下,依次執行各線程的join方法, 這樣可以確保主線程最后退出, 且各個線程間沒有阻塞

t.join()

endTime = time.time()

print('Done, Time cost: %s ' % (endTime - startTime))

總結

以上所述是小編給大家介紹的python爬蟲中多線程的使用詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的python爬虫多线程是什么意思_python爬虫中多线程的使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。