国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

shiyang6017 / 2045人閱讀

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

爬蟲項目介紹

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

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

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

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

具體的關(guān)于該模塊的介紹可以參考其官方網(wǎng)址:https://docs.python.org/3/lib... 。
??本次爬蟲項目將會用到concurrent.futures模塊中的ThreadPoolExecutor類,多線程豆瓣Top250電影圖片。下面將會給出本次爬蟲項目分別不使用多線程和使用多線程的對比,以此來展示多線程在爬蟲中的巨大優(yōu)勢。

不使用多線程

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

import time
import requests
import urllib.request
from bs4 import BeautifulSoup

# 該函數(shù)用于下載圖片
# 傳入函數(shù): 網(wǎng)頁的網(wǎng)址url
def download_picture(url):

    # 獲取網(wǎng)頁的源代碼
    r = requests.get(url)
    # 利用BeautifulSoup將獲取到的文本解析成HTML
    soup = BeautifulSoup(r.text, "lxml")
    # 獲取網(wǎng)頁中的電影圖片
    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個網(wǎng)頁
    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)計該爬蟲的消耗時間
    t1 = time.time()
    print("*" * 50)

    for url in start_urls:
        download_picture(url)
    t2 = time.time()

    print("不使用多線程,總共耗時:%s"%(t2-t1))
    print("*" * 50)

main()

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

**************************************************
不使用多線程,總共耗時:79.93260931968689
**************************************************

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

??我們可以看到,在不使用多線程的情況下,這個爬蟲總共耗時約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)頁的網(wǎng)址url
def download_picture(url):

    # 獲取網(wǎng)頁的源代碼
    r = requests.get(url)
    # 利用BeautifulSoup將獲取到的文本解析成HTML
    soup = BeautifulSoup(r.text, "lxml")
    # 獲取網(wǎng)頁中的電影圖片
    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個網(wǎng)頁
    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)計該爬蟲的消耗時間
    print("*" * 50)
    t3 = time.time()

    # 利用并發(fā)下載電影圖片
    executor = ThreadPoolExecutor(max_workers=10)  # 可以自己調(diào)整max_workers,即線程的個數(shù)
    # submit()的參數(shù): 第一個為函數(shù), 之后為該函數(shù)的傳入?yún)?shù),允許有多個
    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("使用多線程,總共耗時:%s" % (t4 - t3))
    print("*" * 50)

main()

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

**************************************************
使用多線程,總共耗時:9.361606121063232
**************************************************

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

總結(jié)

??通過上述兩個爬蟲程序的對比,我們不難發(fā)現(xiàn),同樣是下載豆瓣Top250電影,10個網(wǎng)頁中的圖片,在沒有使用多線程的情況下,總共耗時約80s,而在使用多線程(10個線程)的情況下,總共耗時約9.5秒,效率整整提高了約8倍。這樣的效率提升在爬蟲中無疑是令人興奮的。
??希望讀者在看了本篇博客后,也能嘗試著在自己的爬蟲中使用多線程,說不定會有意外的驚喜哦~~因為,大名鼎鼎的Python爬蟲框架Scrapy,也是使用多線程來提升爬蟲速度的哦!

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

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41878.html

相關(guān)文章

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

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

    wujl596 評論0 收藏0
  • Java爬蟲下載IMDB中Top250電影圖片

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

    tianren124 評論0 收藏0
  • Python爬蟲 - scrapy - 爬取豆瓣電影TOP250

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

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

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

    senntyou 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<