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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python爬虫多线程下载_Python爬虫之多线程下载豆瓣Top250电影图片

發(fā)布時(shí)間:2024/1/1 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬虫多线程下载_Python爬虫之多线程下载豆瓣Top250电影图片 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

爬蟲項(xiàng)目介紹

本次爬蟲項(xiàng)目將爬取豆瓣Top250電影的圖片,其網(wǎng)址為:https://movie.douban.com/top250, 具體頁(yè)面如下圖所示:

本次爬蟲項(xiàng)目將分別不使用多線程和使用多線程來(lái)完成,通過兩者的對(duì)比,顯示出多線程在爬蟲項(xiàng)目中的巨大優(yōu)勢(shì)。本文所使用的多線程用到了concurrent.futures模塊,該模塊是Python中最廣為使用的并發(fā)庫(kù),它可以非常方便地將任務(wù)并行化。在concurrent.futures模塊中,共有兩種并發(fā)模塊,分別如下:

多線程模式:ThreadPoolExecutor,適合 IO密集型任務(wù);

多進(jìn)程模式:ProcessPoolExecutor,適合計(jì)算密集型任務(wù)。

具體的關(guān)于該模塊的介紹可以參考其官方網(wǎng)址:https://docs.python.org/3/lib... 。

本次爬蟲項(xiàng)目將會(huì)用到concurrent.futures模塊中的ThreadPoolExecutor類,多線程豆瓣Top250電影圖片。下面將會(huì)給出本次爬蟲項(xiàng)目分別不使用多線程和使用多線程的對(duì)比,以此來(lái)展示多線程在爬蟲中的巨大優(yōu)勢(shì)。

不使用多線程

首先,我們不使用多線程來(lái)下載豆瓣Top250電影圖片,其完整的Python代碼如下:

import time

import requests

import urllib.request

from bs4 import BeautifulSoup

# 該函數(shù)用于下載圖片

# 傳入函數(shù): 網(wǎng)頁(yè)的網(wǎng)址url

def download_picture(url):

# 獲取網(wǎng)頁(yè)的源代碼

r = requests.get(url)

# 利用BeautifulSoup將獲取到的文本解析成HTML

soup = BeautifulSoup(r.text, "lxml")

# 獲取網(wǎng)頁(yè)中的電影圖片

content = soup.find('div', class_='article')

images = content.find_all('img')

# 獲取電影圖片的名稱和下載地址

picture_name_list = [image['alt'] for image in images]

picture_link_list = [image['src'] for image in images]

# 利用urllib.request..urlretrieve正式下載圖片

for picture_name, picture_link in zip(picture_name_list, picture_link_list):

urllib.request.urlretrieve(picture_link, 'E://douban/%s.jpg' % picture_name)

def main():

# 全部10個(gè)網(wǎng)頁(yè)

start_urls = ["https://movie.douban.com/top250"]

for i in range(1, 10):

start_urls.append("https://movie.douban.com/top250?start=%d&filter=" % (25 * i))

# 統(tǒng)計(jì)該爬蟲的消耗時(shí)間

t1 = time.time()

print('*' * 50)

for url in start_urls:

download_picture(url)

t2 = time.time()

print('不使用多線程,總共耗時(shí):%s'%(t2-t1))

print('*' * 50)

main()

其輸出結(jié)果如下:

**************************************************

不使用多線程,總共耗時(shí):79.93260931968689

**************************************************

去E盤中的douban文件夾查看,如下圖:

我們可以看到,在不使用多線程的情況下,這個(gè)爬蟲總共耗時(shí)約80s,完成了豆瓣Top250電影圖片的下載。

使用多線程

接下來(lái),我們使用多線程來(lái)下載豆瓣Top250電影圖片,其完整的Python代碼如下:

import time

import requests

import urllib.request

from bs4 import BeautifulSoup

from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED

# 該函數(shù)用于下載圖片

# 傳入函數(shù): 網(wǎng)頁(yè)的網(wǎng)址url

def download_picture(url):

# 獲取網(wǎng)頁(yè)的源代碼

r = requests.get(url)

# 利用BeautifulSoup將獲取到的文本解析成HTML

soup = BeautifulSoup(r.text, "lxml")

# 獲取網(wǎng)頁(yè)中的電影圖片

content = soup.find('div', class_='article')

images = content.find_all('img')

# 獲取電影圖片的名稱和下載地址

picture_name_list = [image['alt'] for image in images]

picture_link_list = [image['src'] for image in images]

# 利用urllib.request..urlretrieve正式下載圖片

for picture_name, picture_link in zip(picture_name_list, picture_link_list):

urllib.request.urlretrieve(picture_link, 'E://douban/%s.jpg' % picture_name)

def main():

# 全部10個(gè)網(wǎng)頁(yè)

start_urls = ["https://movie.douban.com/top250"]

for i in range(1, 10):

start_urls.append("https://movie.douban.com/top250?start=%d&filter=" % (25 * i))

# 統(tǒng)計(jì)該爬蟲的消耗時(shí)間

print('*' * 50)

t3 = time.time()

# 利用并發(fā)下載電影圖片

executor = ThreadPoolExecutor(max_workers=10) # 可以自己調(diào)整max_workers,即線程的個(gè)數(shù)

# submit()的參數(shù): 第一個(gè)為函數(shù), 之后為該函數(shù)的傳入?yún)?shù),允許有多個(gè)

future_tasks = [executor.submit(download_picture, url) for url in start_urls]

# 等待所有的線程完成,才進(jìn)入后續(xù)的執(zhí)行

wait(future_tasks, return_when=ALL_COMPLETED)

t4 = time.time()

print('使用多線程,總共耗時(shí):%s' % (t4 - t3))

print('*' * 50)

main()

其輸出結(jié)果如下:

**************************************************

使用多線程,總共耗時(shí):9.361606121063232

**************************************************

再去E盤中的douban文件夾查看,發(fā)現(xiàn)同樣也下載了250張電影圖片。

總結(jié)

通過上述兩個(gè)爬蟲程序的對(duì)比,我們不難發(fā)現(xiàn),同樣是下載豆瓣Top250電影,10個(gè)網(wǎng)頁(yè)中的圖片,在沒有使用多線程的情況下,總共耗時(shí)約80s,而在使用多線程(10個(gè)線程)的情況下,總共耗時(shí)約9.5秒,效率整整提高了約8倍。這樣的效率提升在爬蟲中無(wú)疑是令人興奮的。

希望讀者在看了本篇博客后,也能嘗試著在自己的爬蟲中使用多線程,說(shuō)不定會(huì)有意外的驚喜哦~~因?yàn)?#xff0c;大名鼎鼎的Python爬蟲框架Scrapy,也是使用多線程來(lái)提升爬蟲速度的哦!

注意:本人現(xiàn)已開通兩個(gè)微信公眾號(hào): 因?yàn)镻ython(微信號(hào)為:python_math)以及輕松學(xué)會(huì)Python爬蟲(微信號(hào)為:easy_web_scrape), 歡迎大家關(guān)注哦~~

總結(jié)

以上是生活随笔為你收集整理的python爬虫多线程下载_Python爬虫之多线程下载豆瓣Top250电影图片的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲欧美高清在线 | 亚洲欧美另类日本 | 成人在线毛片 | 人人超碰97| 成人性做爰aaa片免费 | 日韩精品视频免费播放 | 成人精品综合 | 国产精品视频一区二区三区 | www视频在线观看网站 | 国产精品一品 | 九九视频在线免费观看 | 精品在线你懂的 | 中文字幕人妻一区二区在线视频 | 亚洲天堂网络 | 神马午夜伦理 | 免费瑟瑟网站 | 国产精品入口久久 | 男人的天堂网在线 | 欧美激情久久久 | 草比网站 | 在线观看涩涩视频 | 精品国产无码一区二区三区 | 麻豆视频免费入口 | 欧美青青草 | 亚洲va久久久噜噜噜无码久久 | 清清草视频 | 国产8区| 精品无码久久久久国产 | 一区二区三区91 | 国产视频一区二区不卡 | 91av导航 | 麻豆精品视频在线 | 欧洲自拍偷拍 | 亚洲人屁股眼子交1 | 阿拉伯性视频xxxx | 黄a在线观看 | 天天摸天天碰 | 三级艳丽杨钰莹三级 | 亚洲国产一级 | 波多野结衣久久精品 | 最近日本中文字幕 | 黑色丝袜吻戏亲胸摸腿 | 午夜影院污 | 靠逼在线观看 | 黄色小视频在线免费观看 | 在线中文天堂 | 少妇一级淫片免费放 | www.97av| 欧美成人黄 | 国产精品无码av在线有声小说 | 欧美激情精品久久久久久蜜臀 | 一级视频在线播放 | 日韩精品一区二区三 | www.天天干 | 韩日av在线播放 | 丁香色网| 亚洲国产精品一区二区三区 | 德国艳星videos极品hd | 欧美一级做 | 欧美日韩综合在线观看 | 九九热中文字幕 | 夜夜操天天操 | 欧洲美女粗暴牲交免费观看 | 国产成人aa | 免费视频一二三区 | 欧美成人第一页 | 亚洲 美腿 欧美 偷拍 | 久久精品国产一区二区三区 | 激情插插插 | 91蜜桃视频 | 一道本久在线中文字幕 | 色又色 | 天堂bt在线 | 亚洲人成电影在线 | 日本三级午夜理伦三级三 | 伊人久久艹 | 精品无码久久久久 | 欧美极品第一页 | 亚洲一区在线不卡 | 九九九久久久精品 | 毛茸茸日本熟妇高潮 | 熟妇人妻系列aⅴ无码专区友真希 | 黄色片视频免费在线观看 | 深夜福利一区二区三区 | 亚洲综合视频网 | 69av视频| 久久久久女人精品毛片九一 | 草草网址| 亚洲精品理论片 | 2014亚洲天堂 | 波多野结衣三级视频 | 国产草草影院 | 中文字幕日本在线观看 | 日p视频在线观看 | 伊人超碰在线 | 亚洲av成人精品日韩在线播放 | 一级黄色片欧美 | 在线观看av一区二区 | 999精品在线视频 |