其他
迅雷不给力,我DIY了个下载器
因为我的电脑默认下载器是迅雷,当我浏览github网站,想下载感兴趣的项目,点击下载默认使用的是迅雷。
但是不知道怎么回事,基本上绝大多数是无法下载,含有违规内容!!。
但使用
git clone '要下载的项目.git'
确实可以下载。所以有些时候遇到下载不了的情况,请使用python下载,既能做事又能装逼,😆。
下载图片、视频等文件
网络传输时,其数据流都是二进制数据。所以我们要对url请求,获得该违建的二进制数据,并以wb模式写入一个文件中。注意写入的文件格式必须与待爬的文件格式一致。例如,要爬一个pdf文件,那么保存时一定要用pdf文件后缀名,而不能用doc或者txt。
import requestsimport os
dir = '/Users/suosuo/Desktop/下载'
#改变当前工作路径
os.chdir(dir)
data = requests.get(url).content
#filename文件名,注意与网站上的文件名后缀要一致
with open(filename,'wb') as f:
f.write(data)
github项目下载
import os
project_url = 'https://github.com/airingursb/bilibili-user.git'
dir = '/Users/suosuo/Desktop/github下载'
#改变当前工作文件夹(路径)
os.chdir(path)
command = 'git clone {project}'.format(project=project_url)
os.system(command)
我们可以将上面的代码封装一下,以后遇到这样的数据,迅雷下载不了,可以用这个牛逼的代码。
def download(dir,filename,url):
"""
用于下载图片、视频、github项目等文件
:param dir: 更改当前工作目录
:param filename: 待下载的文件名
:param url: 待下载的资源地址
"""
if 'https://github.com' in url:
import os
os.chdir(dir)
command = 'git clone {project}'.format(project=url)
os.system(command)
else:
import requests
import os
data = requests.get(url).content
os.chdir(dir) # 文件保存路径
with open(filename, 'wb') as f:
f.write(data)
print('下载完成!')
测试一下
我们分别测试下载一张图片、视频和一个github项目,都能正常运行,这里仅展示github项目的。当下载github时,并没有对文件重命名,所以这里filename我随便写了一个名。
download(dir='/Users/suosuo/Desktop',filename='一个框架',url='https://github.com/DarkSand/Sasila.git')
运行代码一会儿的功夫,桌面上出现了一个Sasila的文件夹。
制作GUI可视化界面
为了让DIY下载器使用更方便一些,我使用了PyQt5编写了一个简单的GUI可视化点击操作应用,虽然丑,但是这是自己制作的下载器,很有成就感。
import sysfrom PyQt5.QtWidgets import QWidget, QPushButton, QLabel, QLineEdit, QApplicationclass Downloader(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
"""
生成我们熟悉的台式机上的软件,通过点击按钮执行下载任务
:return:
"""
#QToolTip.setFont(QFont('SansSerif', 10))
#输入url的文本框
self.urlbox = QLineEdit(self)
self.urlbox.setText('请输入url')
#当文本框数据变化会执行connect联系的函数urlChanged
self.urlbox.textChanged[str].connect(self.urlChanged)
self.urlbox.resize(200,20)
self.urlbox.move(50, 20)
#输入保存数据的路径
self.dirbox = QLineEdit(self)
self.dirbox.setText('请输入保存的文件夹路径')
# 当文本框数据变化会执行connect联系的函数dirChanged
self.dirbox.textChanged[str].connect(self.dirChanged)
self.dirbox.resize(200,20)
self.dirbox.move(50, 50)
#输入保存时的文件名
self.filenamebox = QLineEdit(self)
self.filenamebox.setText('请输入文件名')
# 当文本框数据变化会执行connect联系的函数filenameChanged
self.filenamebox.textChanged[str].connect(self.filenameChanged)
self.filenamebox.resize(200,20)
self.filenamebox.move(50, 80)
#点击按钮,执行下载任务
self.btn = QPushButton('Button', self)
self.btn.resize(200,20)
self.btn.move(50, 110)
#按钮状态改变时候,会执行connect联系的函数onClick
self.btn.clicked.connect(self.onClick)
#设置窗体的大小和在屏幕中的位置
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('大邓的下载器')
self.show()
def urlChanged(self, text):
sender = self.sender()
self.url = sender.text()
def dirChanged(self, text):
sender = self.sender()
self.dir = sender.text()
def filenameChanged(self, text):
sender = self.sender()
self.filename = sender.text()
def onClick(self):
sender = self.sender()
if sender.text() and self.filename and self.url and self.dir:
download(dir=self.dir, filename=self.filename, url=self.url)
if __name__ == '__main__':
app = QApplication(sys.argv)
dl = Downloader()
sys.exit(app.exec_())
执行程序,屏幕中出现
结语
这还没有结束,今天做到这一步,本来还行更进一步将其打包成dmg或exe文件,由于能力和精力有限,没有解决各种bug。
如果有人解决了,请在公众号留言,谢谢。
历史文章:
数据采集
【视频】有了selenium,小白也可以自豪的说:“去TMD的抓包、cookie”
【视频】快来get新技能--抓包+cookie,爬微博不再是梦
文本处理分析
图片数据处理
其他
可以选择打赏或转发来支持大邓
代码
链接: https://pan.baidu.com/s/1pLPwpCZ 密码: twtm