成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python爬蟲之多線程下載豆瓣Top250電影圖片

shiyang6017 / 2059人閱讀

摘要:本次爬蟲項(xiàng)目將會(huì)用到模塊中的類,多線程豆瓣電影圖片??偨Y(jié)通過上述兩個(gè)爬蟲程序的對(duì)比,我們不難發(fā)現(xiàn),同樣是下載豆瓣電影,個(gè)網(wǎng)頁(yè)中的圖片,在沒有使用多線程的情況下,總共耗時(shí)約,而在使用多線程個(gè)線程的情況下,總共耗時(shí)約秒,效率整整提高了約倍。

爬蟲項(xiàng)目介紹

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

??本次爬蟲項(xiàng)目將分別不使用多線程和使用多線程來完成,通過兩者的對(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ì)比,以此來展示多線程在爬蟲中的巨大優(yōu)勢(shì)。

不使用多線程

??首先,我們不使用多線程來下載豆瓣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電影圖片的下載。

使用多線程

??接下來,我們使用多線程來下載豆瓣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倍。這樣的效率提升在爬蟲中無疑是令人興奮的。
??希望讀者在看了本篇博客后,也能嘗試著在自己的爬蟲中使用多線程,說不定會(huì)有意外的驚喜哦~~因?yàn)?,大名鼎鼎的Python爬蟲框架Scrapy,也是使用多線程來提升爬蟲速度的哦!

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41878.html

相關(guān)文章

  • Java爬蟲之多線程下載IMDB中Top250電影圖片

    摘要:本次分享將在此基礎(chǔ)上,利用多線程,提高程序運(yùn)行的效率。思路本次分享建立在博客爬蟲之下載中電影的圖片上,總體的爬蟲思路沒有變化,只是在此基礎(chǔ)上引入多線程。 介紹 ??在博客:Java爬蟲之下載IMDB中Top250電影的圖片中我們實(shí)現(xiàn)了利用Java爬蟲來下載圖片,但是效率不算太高。本次分享將在此基礎(chǔ)上,利用多線程,提高程序運(yùn)行的效率。 思路 ??本次分享建立在博客Java爬蟲之下載IMD...

    wujl596 評(píng)論0 收藏0
  • Java爬蟲下載IMDB中Top250電影圖片

    摘要:介紹在博客爬蟲爬取豆瓣電影圖片中我們利用的爬蟲框架,將豆瓣電影圖片下載到自己電腦上。那么,在的爬蟲的也可以下載圖片嗎答案當(dāng)然是肯定的在本次分享中,我們將利用的包和函數(shù)來實(shí)現(xiàn)圖片的下載。 介紹 ??在博客:Scrapy爬蟲(4)爬取豆瓣電影Top250圖片中我們利用Python的爬蟲框架Scrapy,將豆瓣電影Top250圖片下載到自己電腦上。那么,在Java的爬蟲的也可以下載圖片嗎?答...

    tianren124 評(píng)論0 收藏0
  • Python爬蟲 - scrapy - 爬取豆瓣電影TOP250

    摘要:前言新接觸爬蟲,經(jīng)過一段時(shí)間的實(shí)踐,寫了幾個(gè)簡(jiǎn)單爬蟲,爬取豆瓣電影的爬蟲例子網(wǎng)上有很多,但都很簡(jiǎn)單,大部分只介紹了請(qǐng)求頁(yè)面和解析部分,對(duì)于新手而言,我希望能夠有一個(gè)比較全面的實(shí)例。 0.前言 新接觸爬蟲,經(jīng)過一段時(shí)間的實(shí)踐,寫了幾個(gè)簡(jiǎn)單爬蟲,爬取豆瓣電影的爬蟲例子網(wǎng)上有很多,但都很簡(jiǎn)單,大部分只介紹了請(qǐng)求頁(yè)面和解析部分,對(duì)于新手而言,我希望能夠有一個(gè)比較全面的實(shí)例。所以找了很多實(shí)例和文...

    WalkerXu 評(píng)論0 收藏0
  • scrapy入門教程——爬取豆瓣電影Top250!

    摘要:注意爬豆爬一定要加入選項(xiàng),因?yàn)橹灰馕龅骄W(wǎng)站的有,就會(huì)自動(dòng)進(jìn)行過濾處理,把處理結(jié)果分配到相應(yīng)的類別,但偏偏豆瓣里面的為空不需要分配,所以一定要關(guān)掉這個(gè)選項(xiàng)。 本課只針對(duì)python3環(huán)境下的Scrapy版本(即scrapy1.3+) 選取什么網(wǎng)站來爬取呢? 對(duì)于歪果人,上手練scrapy爬蟲的網(wǎng)站一般是官方練手網(wǎng)站 http://quotes.toscrape.com 我們中國(guó)人,當(dāng)然...

    senntyou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<