日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁(yè)編程開(kāi)發(fā)其它知識(shí) → Python實(shí)現(xiàn)多線程批量下載圖片

      Python實(shí)現(xiàn)多線程批量下載圖片

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2012/10/9 8:44:36字體大。A-A+

      作者:佚名點(diǎn)擊:265次評(píng)論:0次標(biāo)簽: Python

      《派森》(Python)3.13 win32 英文安裝版
      • 類型:編程工具大。21M語(yǔ)言:英文 評(píng)分:8.7
      • 標(biāo)簽:
      立即下載

      爬取圖片可真的是一個(gè)可遇不可求的機(jī)會(huì)。

        有需求就會(huì)動(dòng)力。

        目標(biāo):爬取某個(gè)網(wǎng)站上n多頁(yè)的鏈接,每個(gè)鏈接有n多張圖片,每一頁(yè)對(duì)應(yīng)一個(gè)文件夾,每個(gè)文件夾包含n個(gè)鏈接所對(duì)應(yīng)的文件夾。

        步驟1:獲得網(wǎng)頁(yè)的所有鏈接,訪問(wèn)所有鏈接,獲得鏈接里的圖片地址。

        這一步通過(guò)上一篇文章的學(xué)習(xí),同時(shí)寫好正則匹配,就可以簡(jiǎn)單地完成。

        步驟2:根據(jù)圖片地址下載圖片。

        下載jpg格式的圖片其實(shí)很容易。

      1 socket = urllib2.urlopen(url)
      2 data = socket.read()
      3 with open(path, "wb") as jpg:
      4     jpg.write(data)
      5 socket.close()

        其中url為圖片地址,path為保存路徑。

        完成這一步之后,簡(jiǎn)單的批量下載圖片功能就完成了。

        但是,下載的過(guò)程中有幾個(gè)問(wèn)題。

        1、下載速度慢。

        我們打開(kāi)網(wǎng)站的時(shí)候看到圖片的速度在網(wǎng)速不是太慢的情況下其實(shí)也不慢,但是用這種方法下載一張圖片要等很久,有時(shí)卻很快。

        2、下著下著就卡在那里了。

        它就是卡在那里了,不知道要等到什么時(shí)候報(bào)錯(cuò)。

        

        基于這兩個(gè)問(wèn)題,我檢索了一些資料,其中這篇文章對(duì)這個(gè)情況有比較好的說(shuō)明。

        后改進(jìn)如下。

      1 #設(shè)定超時(shí)時(shí)間,單位為秒,放在程序開(kāi)頭即可
      2 timeout = 60
      3 socket.setdefaulttimeout(timeout)
      4
      5 #下載圖片的時(shí)候
      6 time.sleep(10)#先sleep,再讀取數(shù)據(jù)
      7 socket = urllib2.urlopen(urllib2.Request(imgurl))
      8 data = socket.read()
      9 socket.close()
      10 ...

        其實(shí)這個(gè)改進(jìn)當(dāng)時(shí)在程序中的體現(xiàn)不是很明顯,但是后來(lái)我又加入了一個(gè)東西:多線程。

        python的多線程有幾種方法可以實(shí)現(xiàn),通過(guò)這篇博文可以對(duì)此有所了解。

        在這里我采用繼承threading.Thread的方法實(shí)現(xiàn)多線程。

        重載run方法。我這里是每下載一個(gè)圖片就開(kāi)一個(gè)線程(好像不是太好,囧……)。

      1 thread = Download()
      2 thread.imgurl = imgurl
      3 thread.path = path
      4 thread.start()

        這個(gè)多線程用上以后,整個(gè)程序簡(jiǎn)直就像開(kāi)足了馬力,開(kāi)始大力地下載。沒(méi)一會(huì)功夫就下載了100多M的圖片!

        其實(shí)我一開(kāi)始是有顧慮一個(gè)問(wèn)題的,就是為什么線程sleep的時(shí)候能夠偷偷地占用系統(tǒng)的時(shí)間?看看這篇文章的實(shí)驗(yàn)。

        也就是說(shuō),10條線程每個(gè)sleep10秒,結(jié)果也只是花了差不多10秒的時(shí)間。

        圖片的下載速度很快,雖然中途有一些處理異常的網(wǎng)址,但是速度飛一般的快。(后來(lái)增加了一些異常處理)

        很快,開(kāi)始出現(xiàn)異常了,大量的圖片下載失敗。

        研究了很久之后才發(fā)現(xiàn),存儲(chǔ)空間不足……

        于是,搬到一個(gè)10G空閑的分區(qū),開(kāi)始下載,改善異常處理。

        最終完成目標(biāo)的時(shí)候大概完成了8G的下載量。不知道是不是流量太大了,今天老是斷網(wǎng)……

        同時(shí)嘗試了視頻的下載,這個(gè)功能還有待發(fā)掘。

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過(guò)難過(guò)
        • 5 囧
        • 3 圍觀圍觀
        • 2 無(wú)聊無(wú)聊

        熱門評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)