Python批量下載網頁圖片詳細相關教程

來源:互聯網
上載者:User

  很多朋友在網上尋找批量下載圖片的方法~發覺挺淩亂的,無從下手。這裡幫客之家小編就來跟大家分享下使用Python批量下載圖片方法。

Python 32bit 官方安裝版

http://www.6686.com/soft/19115.html

Python 64位官方最新版

http://www.6686.com/soft/19116.html

  Python核心編程(第二版) PDF高清電子版

  目標:爬取某個網站上n多頁的連結,每個連結有n多張圖片,每一頁對應一個檔案夾,每個檔案夾包含n個連結所對應的檔案夾。

  步驟1:獲得網頁的所有連結,訪問所有連結,獲得連結裡的圖片地址。

  步驟2:根據圖片地址下載圖片。

  下載jpg格式的圖片其實很容易。

  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為儲存路徑。

  完成這一步之後,簡單的批量下載圖片功能就完成了。

  但是,下載的過程中有幾個問題。

  1、下載速度慢。

  我們開啟網站的時候看到圖片的速度在網速不是太慢的情況下其實也不慢,但是用這種方法下載一張圖片要等很久,有時卻很快。

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

  它就是卡在那裡了,不知道要等到什麼時候報錯。

  後改進如下。

  1 #設定逾時時間,單位為秒,放在程式開頭即可

  2 timeout = 60

  3 socket.setdefaulttimeout(timeout)

  4

  5 #下載圖片的時候

  6 time.sleep(10)#先sleep,再讀取資料

  7 socket = urllib2.urlopen(urllib2.Request(imgurl))

  8 data = socket.read()

  9 socket.close()

  10 …

  其實這個改進當時在程式中的體現不是很明顯,但是後來我又加入了一個東西:多線程。

  python的多線程有幾種方法可以實現,通過這篇博文可以對此有所瞭解。

  在這裡我採用繼承threading.Thread的方法實現多線程。

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

  1 thread = Download()

  2 thread.imgurl = imgurl

  3 thread.path = path

  4 thread.start()

  這個多線程用上以後,整個程式簡直就像開足了馬力,開始大力地下載。沒一會功夫就下載了100多M的圖片!

  其實我一開始是有顧慮一個問題的,就是為什麼線程sleep的時候能夠偷偷地佔用系統的時間?看看這篇文章的實驗。

  也就是說,10條線程每個sleep10秒,結果也只是花了差不多10秒的時間。

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

  很快,開始出現異常了,大量的圖片下載失敗。

  研究了很久之後才發現,儲存空間不足……

  於是,搬到一個10G閒置分區,開始下載,改善異常處理。

  最終完成目標的時候大概完成了8G的下載量。不知道是不是流量太大了,今天老是斷網……

  同時嘗試了視頻的下載,這個功能還有待發掘。

  教程到此結束~希望對大家有所協助~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.