查看原文
其他

迅雷不给力,我DIY了个下载器

2017-10-18 大邓 大邓带你玩python

因为我的电脑默认下载器是迅雷,当我浏览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驱动器配置详解

icrawler:强大简单的图片爬虫库

抓取单博主的所有微博及其评论

爬虫神器PyQuery的使用方法

pyquery一些自定义的用法

【视频】猫途鹰网站评论数据抓取

【视频讲解】在scrapy框架中如何使用selenium?

【实战视频】使用scrapy写爬虫-爬知乎live

简易SQLite3数据库学习

【视频教程】对视频进行基本操作

【视频】抓包小练习-B站评论数据抓取

fake-useragent库:值得花2分钟学习的库

【视频】爬取饿了么平台上的门店信息

如何抓取视频资源-以头条视频为例

当爬虫遭遇验证码,怎么办

【视频】手把手教你抓美女~

【视频】有了selenium,小白也可以自豪的说:“去TMD的抓包、cookie”

【视频】快来get新技能--抓包+cookie,爬微博不再是梦

【视频教程】用python批量抓取简书用户信息

识别假货有绝招,就用python爬淘宝评论

用Python抓取百度地图里的店名,地址和联系方式

文本处理分析

gensim:用Word2Vec进行文本分析

Python NLP中的五大英雄

用SenticNet库做细粒度情感分析

如何对csv文件中的文本数据进行分析处理

复杂网络分析数据准备篇

文本分析之网络关系

用词云图解读“于欢案”

基于共现发现人物关系的python实现

用pyecharts制作词云图

RAKE:快速自动抽取关键词算法

图片数据处理

OpenCV:快速入门图片人脸识别

好玩的OpenCV:图片操作的基本知识(1)

好玩的OpenCV:图像操作的基本知识(2)

OpenCV:计算图片有多色

如何对数据进行各种排序?

其他

【视频】初学者必看:python环境配置

开扒皮自己微信的秘密

初识装饰器函数

计算运行时间-装饰器实现

花十分钟,给爱机安装个MongoDB

chardet库:轻松识别文件的编码格式

使用Python登录QQ邮箱发送QQ邮件

WTF Python: 开启你的懵逼模式

8行代码实现微信聊天机器人

WTF Python: 开启你的懵逼模式

WTF Python:开启懵逼模式第二弹

使用Python+OpenCV进行面部合成

十分钟学会用Flask发邮件


可以选择打赏或转发来支持大邓


代码

链接: https://pan.baidu.com/s/1pLPwpCZ 密码: twtm


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存