Python實現(xiàn)批量下載文件
更新時間:2015年05月17日 12:11:45 投稿:hebedich
之前給大家分享的python 多線程抓取網(wǎng)頁,不過這個只能用python 來抓取到網(wǎng)頁的源代碼,如果你想用做python 下載文件的話,上面的可能就不適合你了,最近我在用python 做文件下載的時候就遇到這個問題了,不過最終得以解決,我把代碼發(fā)出來
Python實現(xiàn)批量下載文件
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from gevent import monkey
monkey.patch_all()
from gevent.pool import Pool
import requests
import sys
import os
def download(url):
chrome = 'Mozilla/5.0 (X11; Linux i86_64) AppleWebKit/537.36 ' +
'(KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36'
headers = {'User-Agent': chrome}
filename = url.split('/')[-1].strip()
r = requests.get(url.strip(), headers=headers, stream=True)
with open(filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
f.flush()
print filename,"is ok"
def removeLine(key, filename):
os.system('sed -i /%s/d %s' % (key, filename))
if __name__ =="__main__":
if len(sys.argv) == 2:
filename = sys.argv[1]
f = open(filename,"r")
p = Pool(4)
for line in f.readlines():
if line:
p.spawn(download, line.strip())
key = line.split('/')[-1].strip()
removeLine(key, filename)
f.close()
p.join()
else:
print 'Usage: python %s urls.txt' % sys.argv[0]
其他網(wǎng)友的方法:
from os.path import basename
from urlparse import urlsplit
def url2name(url):
return basename(urlsplit(url)[2])
def download(url, localFileName = None):
localName = url2name(url)
req = urllib2.Request(url)
r = urllib2.urlopen(req)
if r.info().has_key('Content-Disposition'):
# If the response has Content-Disposition, we take file name from it
localName = r.info()['Content-Disposition'].split('filename=')[1]
if localName[0] == '"' or localName[0] == "'":
localName = localName[1:-1]
elif r.url != url:
# if we were redirected, the real file name we take from the final URL
localName = url2name(r.url)
if localFileName:
# we can force to save the file as specified name
localName = localFileName
f = open(localName, 'wb')
f.write(r.read())
f.close()
download(r'你要下載的python文件的url地址')
以上便是本文給大家分享的全部內(nèi)容了,小伙伴們可以測試下哪種方法效率更高呢。
您可能感興趣的文章:
- Python獲取遠(yuǎn)程文件大小的函數(shù)代碼分享
- python實現(xiàn)帶錯誤處理功能的遠(yuǎn)程文件讀取方法
- python通過paramiko復(fù)制遠(yuǎn)程文件及文件目錄到本地
- python定時復(fù)制遠(yuǎn)程文件夾中所有文件
- python使用Paramiko模塊實現(xiàn)遠(yuǎn)程文件拷貝
- python 從遠(yuǎn)程服務(wù)器下載日志文件的程序
- Python通過paramiko遠(yuǎn)程下載Linux服務(wù)器上的文件實例
- python實現(xiàn)下載文件的三種方法
- Python實現(xiàn)HTTP協(xié)議下的文件下載方法總結(jié)
- Python實現(xiàn)的遠(yuǎn)程文件自動打包并下載功能示例
相關(guān)文章
使用Python通過代碼創(chuàng)建圖表的詳細(xì)步驟
這篇文章主要介紹了使用Python通過代碼創(chuàng)建圖表的詳細(xì)步驟,文中介紹了如何使用DiagramasCode工具創(chuàng)建基礎(chǔ)架構(gòu)的架構(gòu)圖,并通過Python腳本生成并上傳到對象存儲桶,需要的朋友可以參考下2024-12-12
Python實現(xiàn)合并同一個文件夾下所有txt文件的方法示例
這篇文章主要介紹了Python實現(xiàn)合并同一個文件夾下所有txt文件的方法,涉及Python針對文件的遍歷、讀取、寫入等相關(guān)操作技巧,需要的朋友可以參考下2018-04-04
用Python進(jìn)行柵格數(shù)據(jù)的分區(qū)統(tǒng)計和批量提取
該教程其實源于web,我看到之后覺得很實用,于是自己又重復(fù)做了一遍,寫了詳細(xì)的注釋分享給大家,希望對大家的研究有幫助,本文講述了柵格的分區(qū)統(tǒng)計,批量提取,深化理解遍歷循環(huán)等內(nèi)容2021-05-05
python 使用poster模塊進(jìn)行http方式的文件傳輸?shù)椒?wù)器的方法
今天小編就為大家分享一篇python 使用poster模塊進(jìn)行http方式的文件傳輸?shù)椒?wù)器的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
PyQt中使用QProcess運行一個進(jìn)程的示例代碼
這篇文章主要介紹了在PyQt中使用QProcess運行一個進(jìn)程,本例中通過按下按鈕,啟動了windows系統(tǒng)自帶的記事本程序,即notepad.exe, 因為它在windows的系統(tǒng)目錄下,該目錄已經(jīng)加在了系統(tǒng)的PATH環(huán)境變量中,所以不需要特別指定路徑,需要的朋友可以參考下2022-12-12
Python爬蟲之Selenium多窗口切換的實現(xiàn)
這篇文章主要介紹了Python爬蟲之Selenium多窗口切換的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

