You-get 万能的音视频下载工具

You-Get 是一个使用Python开发的小型命令行实用程序,可以通过一行命令直接从Web下载媒体内容(视频,音频,图像)等,不用任何配置。

这款工具支持的站点特别多,比如Youtube、优酷、腾讯视频、网易云音乐、Ted、知乎等等主流网站,可以说几乎是万能的,在本文最下方的附录可查看You-Get支持的完整网站列表。

下面是这个万能工具的使用指南。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。

(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

(可选2) 此外,推荐大家用VSCode编辑器来编写小型Python项目:Python 编程的最好搭档—VSCode 详细指南

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),输入命令安装依赖:

pip install you-get

2.使用方法

使用的时候直接在命令行输入:

you-get 媒体链接

就能将媒体内容下载在当前命令行输出的文件夹中,比如下载网易云音乐的歌曲:
https://music.163.com/#/song?id=1811118551

不仅如此,下载B站的视频,它连多part视频都能一并下载:

第一次下载的时候,它会提示这是个多part视频,后缀添加–playlist下载全部part视频:

令人惊喜的是,这个工具在下载视频的同时将弹幕数据也下载了:

弹幕文件通过 danmu2ass 这样的工具处理后,就可以将弹幕数据格式化为ass文件,用播放器播放视频的时候,将ass格式的弹幕文件导入到播放器,就能完美复现B站的体验效果。

知乎的下载比较特别,只支持下载回答和专栏内出现的视频:

3.增值功能

3.1 暂停和继续下载

没错,这个工具支持断点续传,这是为了防止出现下载的视频太长,用户中途停止导致前面下载的内容报废的问题。

1.暂停下载:按 Ctrl+C 可以中断命令,下载目录下会保存有一个以 .download 为扩展名的缓存文件。

2.继续下载:重新执行相同的命令下载任务,如果下载目录下有上次下载保存的缓存文件,则继续上次下载进度。

3.强制重新下载(即使下载完成也会重新写入),带 -f 参数即可:

you-get -f https://www.bilibili.com/video/BV137411n7hY

3.2 选择视频格式和清晰度

用过 -i 参数能获得当前视频所有的清晰度和格式:

拿到格式名称后,如果你想下载高清 1080P的视频,只需要带–format参数就可以下载指定格式的视频:

you-get --format=dash-flv https://www.bilibili.com/video/BV137411n7hY

3.3 本地播放器直接播放网络视频

这也是一个相当强力的特性,如果你受不了网页播放器那些简单的功能,想加一些比如调整屏幕比例为2.35:1之类的自己本地播放器的功能,那你可以尝试这样做:

1.在资源管理器中打开 你的播放器的 安装目录
2.按住Shift并在空白处右击鼠标,选择在此处打开 Powershell 窗口
3.输入下面的 You-Get 播放命令即可

you-get -p 你的播放器.exe https://www.bilibili.com/video/BV1Fa4y1a7jE

3.4 代理设置

你如果有下载油管之类的视频的需求,那么可能需要设置代理才可以下载成功,you-get 也提供了这样的选项:

you-get -x 127.0.0.1:8087 'https://www.youtube.com/watch?v=jNQXAC9IVRw'

-x 参数后接代理的 IP:端口号,再将需要下载的视频链接放到后面就可以了,非常方便。

3.5 设置下载文件的路径

如果你不想把文件下载到当前命令行所处的文件夹中,那么可以用 -o 参数指定下载目录:

you-get -o C:\Users\83493\Downloads 'https://www.bilibili.com/video/BV1Fa4y1a7jE'

大体功能就是这些,相信已经能够覆盖大家的日常使用范围了,喜欢的话请在下方点个赞或者在看让更多的人看到吧!

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!


​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

Pandas 性能优化

附录:

SiteURL视频图像音频
YouTubehttps://www.youtube.com/
Twitterhttps://twitter.com/
VKhttp://vk.com/
Vinehttps://vine.co/
Vimeohttps://vimeo.com/
Veohhttp://www.veoh.com/
Tumblrhttps://www.tumblr.com/
TEDhttp://www.ted.com/
SoundCloudhttps://soundcloud.com/
SHOWROOMhttps://www.showroom-live.com/
Pinteresthttps://www.pinterest.com/
MTV81http://www.mtv81.com/
Mixcloudhttps://www.mixcloud.com/
Metacafehttp://www.metacafe.com/
Magistohttp://www.magisto.com/
Khan Academyhttps://www.khanacademy.org/
Internet Archivehttps://archive.org/
Instagramhttps://instagram.com/
InfoQhttp://www.infoq.com/presentations/
Imgurhttp://imgur.com/
Heavy Music Archivehttp://www.heavy-music.ru/
Freesoundhttp://www.freesound.org/
Flickrhttps://www.flickr.com/
FC2 Videohttp://video.fc2.com/
Facebookhttps://www.facebook.com/
eHowhttp://www.ehow.com/
Dailymotionhttp://www.dailymotion.com/
Coubhttp://coub.com/
CBShttp://www.cbs.com/
Bandcamphttp://bandcamp.com/
AliveThaihttp://alive.in.th/
interest.mehttp://ch.interest.me/tvn
755
ナナゴーゴー
http://7gogo.jp/
niconico
ニコニコ動画
http://www.nicovideo.jp/
163
网易视频
网易云音乐
http://v.163.com/
http://music.163.com/
56网http://www.56.com/
AcFunhttp://www.acfun.cn/
Baidu
百度贴吧
http://tieba.baidu.com/
爆米花网http://www.baomihua.com/
bilibili
哔哩哔哩
http://www.bilibili.com/
豆瓣http://www.douban.com/
斗鱼http://www.douyutv.com/
凤凰视频http://v.ifeng.com/
风行网http://www.fun.tv/
iQIYI
爱奇艺
http://www.iqiyi.com/
激动网http://www.joy.cn/
酷6网http://www.ku6.com/
酷狗音乐http://www.kugou.com/
酷我音乐http://www.kuwo.cn/
乐视网http://www.le.com/
荔枝FMhttp://www.lizhi.fm/
懒人听书http://www.lrts.me/
秒拍http://www.miaopai.com/
MioMio弹幕网http://www.miomio.tv/
MissEvan
猫耳FM
http://www.missevan.com/
痞客邦https://www.pixnet.net/
PPTV聚力http://www.pptv.com/
齐鲁网http://v.iqilu.com/
QQ
腾讯视频
http://v.qq.com/
企鹅直播http://live.qq.com/
Sina
新浪视频
微博秒拍视频
http://video.sina.com.cn/
http://video.weibo.com/
Sohu
搜狐视频
http://tv.sohu.com/
Tudou
土豆
http://www.tudou.com/
阳光卫视http://www.isuntv.com/
Youku
优酷
http://www.youku.com/
战旗TVhttp://www.zhanqi.tv/lives
央视网http://www.cntv.cn/
Naver
네이버
http://tvcast.naver.com/
芒果TVhttp://www.mgtv.com/
火猫TVhttp://www.huomao.com/
阳光宽频网http://www.365yg.com/
西瓜视频https://www.ixigua.com/
新片场https://www.xinpianchang.com/
快手https://www.kuaishou.com/
抖音https://www.douyin.com/
TikTokhttps://www.tiktok.com/
中国体育(TV)http://v.zhibo.tv/
http://video.zhibo.tv/
知乎https://www.zhihu.com/

Young – Python 开发的功能丰富的社区bbs类网站

[download_code]

Young是一个基于 Tornado 框架、MongoDB 数据库,用Python写的社区软件,功能丰富、界面小清新类似NodeBB的社区软件。

Features:

  • 话题按主题分类,你可以查看某一主题的话题
  • 支持匿名发帖,匿名评论
  • 社交功能(朋友圈,发状态)
  • 像QQ一样即时聊天
  • 实时提醒
  • 资源分享

安装

在Unbuntu 16.04上

git clone https://github.com/shiyanhui/Young.git
cd Young && ./scripts/install.sh

然后设置你的Mongodb环境

1. 修改/etc/mongod.conf,添加

    replication:
        replSetName: rs0

2. 重启Mongodb服务

    service mongod restart

3. 启动mongo,执行initiate

    mongo
    rs.initiate()

下一步需要做的是初始化Mongodb数据库

fab init

如果你想自己搭建Email服务器,运行setup_mail.sh脚本

./scripts/setup_mail.sh

注意:

scripts/install.sh 只在Ubuntu16.04上面测试过,如果你是Ubuntu其他版本或者其他 操作系统,你需要手动安装。scripts/install.sh 稍微修改一下,一步一步安装即可。

依赖

- Mongodb >= 2.6
- Ejabberd >= 16.08
- NSQ >= 0.3.8
- Elasticsearch >= 2.3.5
- NodeJS >= 4.0

Development 开发模式

  • 在运行之前必须启动所有依赖的服务
    fab start_service
  • 在非debug模式中,每次修改后,需要重建资源
    fab build
  • 本地运行
    # 默认为非debug模式,run之前会自动地build
    fab run

    # 启用debug模式
    fab run:debug=true

License

GNU Affero General Public License v3 (AGPL-3).

Superset — 开源的数据可视化和数据探索平台

一个现代的,可用于企业的商业智能Web应用程序。

Superset

提供:

  • 直观的界面可浏览和可视化数据集,并创建交互式仪表板
  • 各种精美的可视化效果可展示您的数据。
  • 简单,无代码的用户流程,可以对裸露的仪表板下的数据进行细分和切分。仪表板和图表是进行深入分析的起点
  • 先进的SQL编辑器/ IDE公开了丰富的元数据浏览器,以及轻松的工作流程,可从任何结果集中创建可视化内容。
  • 可扩展的高粒度安全模型,允许有关谁可以访问哪些产品功能和数据集的复杂规则。与主要的身份验证后端集成(数据库,OpenID,LDAP,OAuth,REMOTE_USER等)
  • 轻量级语义层,允许通过定义维度和指标来控制如何向用户公开数据源
  • 对大多数说SQL的数据库提供开箱即用的支持
  • 与Druid的深度集成使Superset能够在切片和切块大型实时数据集时快速燃烧
  • 具有可配置缓存的快速加载仪表板

1.支持的数据库

Superset通过SQLAlchemy讲许多SQL方言,SQLAlchemy是与大多数数据库兼容的Python SQL工具包。以下是一些受支持的主要数据库解决方案:

红移 谷歌查询 雪花 普雷斯托 德鲁伊 PostgreSQL MySQL的 mssql服务器 db2 sqlite sybase 玛丽亚德 垂直 甲骨文 火鸟 青梅 Clickhouse exasol 莫奈数据库 阿帕奇麒麟

可以在此处找到受支持的数据库的完整列表 。

2.安装与配置

在本地尝试Superset的最快方法是在Linux或Mac OSX计算机上使用Docker和Docker Compose。Superset对Windows没有官方支持,因此我们在下面提供了VM解决方法。

1.安装Docker引擎和Docker Compose

Mac OSX

安装Docker for Mac,其中包括Docker引擎和docker-compose现成的最新版本。

安装Docker for Mac后,打开Docker的首选项窗格,转到“资源”部分,并将分配的内存增加到6GB。默认情况下,仅分配2GB的RAM,Superset将无法启动。

的Linux

按照适用于您的任何Linux风格的Docker指导,在Linux上安装Docker。由于docker-compose未在Linux上作为基本Docker安装的一部分进行安装,因此,一旦您具有可用的引擎,请按照Linux的 docker-compose安装说明进行操作。

视窗

不幸的是,Windows上没有正式支持Superset。Windows用户在本地尝试Superset的最佳选择是通过VirtualBox安装Ubuntu桌面VM, 并继续在该VM中使用Linux上的Docker指令。我们建议为虚拟机分配至少8GB的RAM,并配置至少40GB的硬盘,以便为操作系统和所有必需的依赖项留出足够的空间。

2.克隆Superset的Github存储库

使用以下命令在您的终端中克隆Superset的仓库

$ git clone https://github.com/apache/incubator-superset.git

或者在本网站中直接下载Superset GitHub存储库。

该命令成功完成后,您应该incubator-superset在当前目录中看到一个新文件夹。

我们建议您检出并运行上一个标记版本的代码:

$ git checkout latest

3.通过Docker Compose启动Superset

导航到您在步骤1中创建的文件夹:

$ cd incubator-superset

然后,运行以下命令:

$ docker-compose up

您应该看到一堵墙,记录着机器上正在启动的容器的输出。一旦该输出变慢,您应该在本地计算机上有一个正在运行的Superset实例!

4.登录到 Superset

您本地的Superset实例还包括一个Postgres服务器来存储您的数据,并且已经预先加载了Superset附带的一些示例数据集。现在,您可以通过Web浏览器访问Superset http://localhost:8088。请注意,许多浏览器现在默认为https-如果您的浏览器是其中之一,请确保使用http

使用默认的用户名和密码登录:

username: admin
password: admin

恭喜!您已成功安装Superset!

Easytrader 一个Python自动交易股票的神器

在量化投资系列教程中,我们从理论上介绍了量化回测的基本原理和思路,并进行了一定的实战分析和演练。但是并没有涉及到实际交易的场景。

在开始之前,我们需要明确什么策略需要使用自动交易的方式。我们前面的教程都是基于日线的策略,这样的日线策略并不需要自动化交易,因为你只需要提前一天算好第二天需要买入的股票即可。

什么情况下需要本文的自动交易?

1.你的策略是基于 分钟线 (1,5,15,60) 的。
2.你的日线策略在购买的时候需要判断前一天封盘前的股票数据,并提前一天买入。
3.你希望能自动打新。

除了这两种情况,其他的策略都不适合使用本文的自动交易,包括秒级别的策略,因为Easytrader是基于GUI层面(图形界面)实现的自动化接口,而非API层面,因此实时性不会很高,而且是串行形式的,并不适合秒级策略。

此外,Easytrader对券商有一定的要求:

目前支持 海通客户端、华泰客户端、国金客户端、雪球,还有通用同花顺客户端(指的是那些基于同花顺修改的券商软件版本)。

在开始自动交易前,请确认你的策略是可靠的,否则不要轻易尝试自动交易。另外交易逻辑的处理也需要非常谨慎,错一行代码可能损失的是几千块甚至不止。所以,一开始执行自动交易的时候,推荐只用很小一部分的本金。

本文只会介绍Easytrader的安装方法和基本使用方法及构建监控股票池的重要性,其他深入介绍将于后面的 量化投资系列教程10 中介绍,敬请期待。

一个小小的预告

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。

(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

(可选2) 此外,推荐大家用VSCode编辑器来编写小型Python项目:Python 编程的最好搭档—VSCode 详细指南

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),输入命令安装依赖:

在终端输入以下命令安装我们所需要的依赖模块:

pip install easytrader

看到 Successfully installed xxx 则说明安装成功。

某些券商在登录的时候可能需要识别验证码,这时候需要下载tesseract

1.下载并安装tesseract

前往 tesseract-ocr 官网下载二进制包,此外你也可以在Python实用宝典公众号后台回复: tesseract,直接获得tesseract的安装包。

双击下载下来的安装包,然后傻瓜式安装就可以,这里只需要注意一点:安装过程中有一个让你选择 Additional language data(download) 表示选择的话帮你下载语言包,这里最好不要选择勾选,因为勾选的话,安装过程非常慢,本教程只需要用到数字和英文识别而已。

2.配置环境变量

右击我的电脑/计算机,选择属性,然后选择高级属性设置,选择环境变量,在系统变量的path变量中添加你的 tesseract 目录就可以了

3.判断是否安装成功

在命令行中输入:

tesseract --version

出现下面的提示说明安装成功:

2.Easytrader 基本使用

这一章将介绍Easytrader的基本使用方法、包括客户端连接、获取资金状况、获取持仓、买入、卖出、一键打新、撤单。

在开始之前,请对客户端调整以下设置,不然会导致下单时价格出错以及客户端超时锁定。

  • 系统设置 > 界面设置: 界面不操作超时时间设为 0
  • 系统设置 > 交易设置: 默认买入价格/买入数量/卖出价格/卖出数量 都设置为 空

同时客户端不能最小化也不能处于精简模式。

2.1 自动登录客户端:

在Windows机器上下载好我们在文首提到的几个券商客户端、准备好Python相关的依赖,即可开始尝试自动登录客户端:

import easytrader

# 海通客户端
user = easytrader.use('htzq_client')
user.prepare(user='用户名', password='明文密码')

# 华泰客户端
user = easytrader.use('ht_client')
user.prepare(user='用户名', password='明文密码', comm_password='华泰通讯密码,其他券商不用')

# 国金客户端
user = easytrader.use('gj_client')
user.prepare(user='用户名', password='明文密码')

# 雪球
user = easytrader.use('xq')
user.prepare(user='用户名', password='明文密码')

# 通用同花顺客户端, 指对应券商官网提供的基于同花顺修改的软件版本, 如(银河的双子星)
user = easytrader.use('ths')
user.prepare(user='用户名', password='明文密码')

选择你的客户端,将其他的客户端去掉,运行这个py文件,程序就会开始自动登录,期间会识别很多次验证码,经常会识别错误,没关系,让他慢慢重试即可。

如果你识别验证码的时候报了错,程序停止了下来,那是因为你没安装 tesseract, 回到第一步安装tesseract即可。

2.2 获取资金、持仓情况

获取资金、持仓情况的时候,程序都会自动化地进入相关界面获取信息。有时候也需要输入验证码,这时候easytrader也会自动识别,请不要介入。

import easytrader
# 国金客户端
user = easytrader.use('gj_client')
user.prepare(user='用户名', password='明文密码')

# 获取资金状况
balance = user.balance
print(balance)
# [{'参考市值': 21642.0,
#   '可用资金': 28494.21,
#   '币种': '0',
#   '总资产': 50136.21,
#   '股份参考盈亏': -90.21,
#   '资金余额': 28494.21,
#   '资金帐号': 'xxx'}]

# 获取持仓情况
position = user.position
print(position)
# [{'买入冻结': 0,
#   '交易市场': '沪A',
#   '卖出冻结': '0',
#   '参考市价': 4.71,
#   '参考市值': 10362.0,
#   '参考成本价': 4.672,
#   '参考盈亏': 82.79,
#   '当前持仓': 2200,
#   '盈亏比例(%)': '0.81%',
#   '股东代码': 'xxx',
#   '股份余额': 2200,
#   '股份可用': 2200,
#   '证券代码': '601398',
#   '证券名称': '工商银行'}]

2.3 买入、卖出、一键打新、撤单

买入卖出时设定股票代码,价格和数量即可:

import easytrader
# 国金客户端
user = easytrader.use('gj_client')
user.prepare(user='用户名', password='明文密码')

# 买入
user.buy('162411', price=0.55, amount=100)
# {'entrust_no': 'xxxxxxxx'}

# 卖出
user.sell('162411', price=0.55, amount=100)
# {'entrust_no': 'xxxxxxxx'}

# 一键打新
user.auto_ipo()

# 撤单
user.cancel_entrust('buy/sell 获取的 entrust_no')
# {'message': '撤单申报成功'}

如果资金不足或可用证券数量不足,程序会报错,这时候请注意把错误except出来,不然你的检测周期可能因此中断,如果是无人值守的程序,可能整个程序都会停止。

3.构建监控股票池

为什么需要构建股票池?如我们前面提到的,Easytrader是基于GUI层面的自动化交易接口,它会进入如下模样的界面进行自动化操作:

如果你的监控对象太多,有多个对象同时符合策略,它会一个一个地进行操作,容易耽误下个周期的计算,因此推荐构建一个50只股票左右的股票池。

你可以根据基本面构造你的股票池,比如最近几年年报中,扣非净利润均有所增长的企业,或是在你的策略下表现最好的50只股票(当然未来不一定靠谱)。

无论你怎么构造,请记录下这些股票(最好是数组变量的形式),证券市场的前缀在前,代码在后,比如 sh600519:

# 以2000元的价格买入100股sh600519, 贵州茅台
user.buy('sh600519', 2000, 100)

当然,此时会报错:

毕竟我未实现100股自由,希望各位能在下方点个“在看”,让我尽早实现100股自由。

欢迎在公众号后台回复:加群,回答相应红字验证信息,进入互助群交流。

我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注Python实用宝典。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

HTTPie–API时代的人性化CLI HTTP客户端

HTTPie的实际应用

HTTPie(发音为aitch-tee-tee-pie)是一个命令行HTTP客户端。其目标是使CLI与Web服务的交互尽可能对人类友好。HTTPie设计用于测试,调试,并通常与API和HTTP服务器交互。在httphttps命令允许创建和发送任意HTTP请求。它们使用简单自然的语法,并提供格式化和彩色输出。

1.主要特点

  • 富有表现力和直观的语法
  • 格式化和彩色的终端输出
  • 内置JSON支持
  • 表格和文件上传
  • HTTPS,代理和身份验证
  • 任意请求数据
  • 自定义标题
  • 持续性会议
  • 类似于Wget的下载
  • Linux,macOS和Windows支持
  • 外挂程式
  • 文献资料
  • 测试范围

2.安装

2.1 macOS

在macOS上,可以通过Homebrew安装HTTPie (推荐):

$ brew install httpie

MacPorts端口也可用:

$ port install httpie

2.2 Linux

大多数Linux发行版都提供可以使用系统软件包管理器安装的软件包,例如:

# Debian, Ubuntu, etc.
$ apt install httpie
# Fedora
$ dnf install httpie
# CentOS, RHEL, ...
$ yum install httpie
# Gentoo
$ emerge httpie
# Arch Linux
$ pacman -S httpie

2.3 Windows等

通用安装方法(可在Windows,Mac OS X,Linux等上运行,并且始终提供最新版本)是使用pip

# Make sure we have an up-to-date version of pip and setuptools:
$ python -m pip install --upgrade pip setuptools
$ python -m pip install --upgrade httpie

(如果pip由于某种原因安装失败,您可以尝试 easy_install httpie作为备用。)

2.4 Python版本

需要Python 3.6或更高版本。

2.5不稳定版本

您也可以直接从masterGitHub上的分支安装最新的未发布开发版本。它是未来稳定版本的正在进行中,因此体验可能不太顺利。

在macOS上,您可以使用Homebrew安装它:

$ brew uninstall --force httpie
$ brew install --HEAD httpie

否则pip

$ pip install --upgrade https://github.com/httpie/httpie/archive/master.tar.gz

验证现在我们具有 带后缀的 当前开发版本标识符-dev,例如:

$ http --version
# 2.0.0-dev

3.用法

你好,世界:

$ https httpie.io/hello

概要:

$ http [flags] [METHOD] URL [ITEM [ITEM]]

另请参阅http --help

4范例

自定义HTTP方法,HTTP标头和JSON数据:

$ http PUT pie.dev/put X-API-Token:123 name=John

提交表格:

$ http -f POST pie.dev/post hello=World

查看使用输出选项之一发送的请求:

$ http -v pie.dev/get

构建并打印请求,而无需使用离线模式发送请求:

$ http --offline pie.dev/post hello=offline

使用GitHub的API发布上的评论 问题 与身份验证:

$ http -a USERNAME POST https://api.github.com/repos/httpie/httpie/issues/83/comments body='HTTPie is awesome! :heart:'

使用重定向输入上传文件:

$ http pie.dev/post < files/data.json

下载文件并通过重定向输出保存:

$ http pie.dev/image/png > image.png

下载文件wget样式:

$ http --download pie.dev/image/png

使用命名会话可以使通信的某些方面在同一主机的请求之间保持不变:

$ http --session=logged-in -a username:password pie.dev/get API-Key:123
$ http --session=logged-in pie.dev/headers

设置自定义Host标头以解决丢失的DNS记录:

$ http localhost:8000 Host:example.com

5.HTTP方法

HTTP方法的名称恰好在URL参数之前:

$ http DELETE pie.dev/delete

看起来与实际Request-Line发送的相似:

DELETE /delete HTTP/1.1

METHOD命令中省略参数时,HTTPie默认为GET(无请求数据)或POST(有请求数据)。

6.请求网址

HTTPie执行请求所需的唯一信息是URL。

默认方案是http://并且可以从参数中省略:

$ http example.org
# => http://example.org

HTTPie还安装了一个https可执行文件,其默认方案为https://

$ https example.org
# => https://example.org

6.1查询字符串参数

如果您发现自己在终端上手动构造带有querystring参数的URL,则可能会喜欢param==value附加URL参数的语法。

这样,您就不必担心转义& 分隔符为您的外壳。此外,参数名称或值中的任何特殊字符都将自动转义URL(与完整URL中指定的参数相反,HTTPie不会修改该参数)。

$ http https://api.github.com/search/repositories q==httpie per_page==1
GET /search/repositories?q=httpie&per_page=1 HTTP/1.1

6.2 URL快捷方式 localhost

此外,还支持localhost的curl-like速记。这意味着,例如,:3000将扩展为http://localhost:3000 如果省略端口,则假定端口为80。

$ http :/foo
GET /foo HTTP/1.1
Host: localhost
$ http :3000/bar
GET /bar HTTP/1.1
Host: localhost:3000
$ http :
GET / HTTP/1.1
Host: localhost

6.3其他默认方案

调用HTTPie时https,默认方案为https:// ($ https example.org将向发送请求https://example.org)。

您还可以使用该--default-scheme <URL_SCHEME>选项为HTTP(可能通过插件支持)以外的其他协议创建快捷方式。httpie-unixsocket插件的示例:

# Before
$ http http+unix://%2Fvar%2Frun%2Fdocker.sock/info
# Create an alias
$ alias http-unix='http --default-scheme="http+unix"'
# Now the scheme can be omitted
$ http-unix %2Fvar%2Frun%2Fdocker.sock/info

6.4   --path-as-is

HTTP客户端的标准行为是通过压缩点段来标准化URL的路径部分,就像通常的文件系统将那样:

$ http -v example.org/./../../etc/password
GET /etc/password HTTP/1.1

--path-as-is选项允许您禁用此行为:

$ http --path-as-is -v example.org/./../../etc/password
GET /../../etc/password HTTP/1.1

Ansible—简单的IT自动化平台, 让APP和系统更易于部署和维护

[download_code]

Ansible

Ansible是一个非常简单的IT自动化系统。它处理配置管理,应用程序部署,云供应,临时任务执行,网络自动化和多节点编排。Ansible使用负载均衡器轻松进行复杂的更改,例如零停机滚动更新。有关更多信息,请访问Ansible网站

1.设计原则

  • 设置过程非常简单,学习过程很少。
  • 快速且并行地管理计算机。
  • 避免使用自定义代理程序和其他开放端口,通过利用现有的SSH守护程序实现无代理。
  • 用机器和人类友好的语言描述基础架构。
  • 专注于安全性和易于审核/审查/内容重写。
  • 立即管理新的远程计算机,而无需启动任何软件。
  • 允许以任何动态语言开发模块,而不仅仅是Python。
  • 可用作非根用户。
  • 成为有史以来最容易使用的IT自动化系统。

2.安装Ansible

2.1 使用安装Ansible pip

Ansible可以使用pipPython软件包管理器进行安装。如果pip您的Python系统尚不可用,请运行以下命令进行安装:

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python get-pip.py --user

注意

如果您安装了Ansible 2.9或更早版本,则需要先使用它来删除旧版本的Ansible,然后再重新安装它。pip uninstall ansible

然后安装Ansible:

$ python -m pip install --user ansible

为了使用需要的paramiko连接插件或模块paramiko,请安装所需的模块2

$ python -m pip install --user paramiko

如果要全局安装Ansible,请运行以下命令:

$ sudo python get-pip.py
$ sudo python -m pip install ansible

2.2 在Ubuntu上安装Ansible

在此处的PPA中获得Ubuntu版本。

要在您的计算机上配置PPA并安装Ansible,请运行以下命令:

$ sudo apt update
$ sudo apt install software-properties-common
$ sudo apt-add-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible

注意

在较旧的Ubuntu发行版中,“ software-properties-common”被称为“ python-software-properties”。您可能要使用apt-get而不是apt在旧版本中使用。另外,请注意,只有较新的发行版(即18.04、18.10等)才带有-u--update标志,因此请相应地调整脚本。

Debian / Ubuntu软件包也可以从源签出中构建,运行:

$ make deb

您可能还希望从源头获得开发分支,下面将对此进行介绍。

2.3 在macOS上安装Ansible

在Mac上安装Ansible的首选方法是使用pip

有关说明,请参见2.1使用pip安装Ansible

如果您运行的是macOS 10.12或更早版本,则应升级到最新版本pip以安全地连接到Python软件包索引。应该注意的是,pip必须作为模块在macOS上运行,并且链接的pip说明将向您展示如何执行该操作。

注意

如果您安装了Ansible 2.9或更早版本,则需要先使用它来删除旧版本的Ansible,然后再重新安装它。

pip uninstall ansible

如果要在macOS Mavericks(10.9)上安装,则编译器可能会产生一些噪音。解决方法是执行以下操作:

$CFLAGS=-Qunused-arguments CPPFLAGS=-Qunused-arguments pip install --user ansible

3.使用Ansible

您可以使用pip或软件包管理器来安装Ansible的发行版本。有关在各种平台上安装Ansible的详细信息,请参见我们的 安装指南

红帽提供受支持的Ansible Engine版本

高级用户和开发人员可以直接运行devel具有最新功能和修复的分支。尽管它相当稳定,但是在运行devel分支时,您更有可能遇到重大更改。如果您想运行devel分支,我们建议您加入Ansible社区。

4.参与其中

  • 阅读社区信息以了解各种有助于项目并与项目进行交互的方式,包括邮寄列表信息以及如何将错误报告和代码提交给Ansible。
  • 加入工作组,这是一个致力于特定技术领域或平台的有组织的社区。
  • 通过拉取请求向devel分支提交建议的代码更新。
  • 在进行较大更改之前,请与我们联系,以避免重复工作。这不仅可以帮助每个人都知道发生了什么,还可以帮助我们节省时间和精力(如果我们决定需要进行一些更改)。
  • 有关电子邮件列表,IRC频道和工作组的列表,请参见“ 通信”页面

5.编码准则

我们在《开发人员指南》中记录了我们的《编码指南。我们特别建议您查看:

6.分行信息

  • devel分支对应于正在开发中的发行版。
  • stable-2.X分支对应的稳定版本。
  • 如果要打开PR,请创建一个分支,devel并基于它建立一个dev环境
  • 有关活动分支的信息,请参见Ansible版本和维护页面。

7.版本图

根据团队和社区的反馈,将发布主要版本或次要版本的初始路线图(例如:2.7、2.8)。该Ansible路线图页详细说明了计划,以及如何影响路线图。

 

You-get—万能的Web媒体内容下载工具

[download_code]

You-Get是一个很小的命令行实用程序,可以从Web下载媒体内容(视频,音频,图像)。

这是you-getYouTube下载视频的方法:

$ you-get 'https://www.youtube.com/watch?v=jNQXAC9IVRw'
site:                YouTube
title:               Me at the zoo
stream:
    - itag:          43
      container:     webm
      quality:       medium
      size:          0.5 MiB (564215 bytes)
    # download-with: you-get --itag=43 [URL]

Downloading Me at the zoo.webm ...
 100% (  0.5/  0.5MB) ├██████████████████████████████████┤[1/1]    6 MB/s

Saving Me at the zoo.en.srt ... Done.

支持的网站:

Site URL 视频 图像 音频
YouTube https://www.youtube.com/
Twitter https://twitter.com/
VK http://vk.com/
Vine https://vine.co/
Vimeo https://vimeo.com/
Veoh http://www.veoh.com/
Tumblr https://www.tumblr.com/
TED http://www.ted.com/
SoundCloud https://soundcloud.com/
SHOWROOM https://www.showroom-live.com/
Pinterest https://www.pinterest.com/
MTV81 http://www.mtv81.com/
Mixcloud https://www.mixcloud.com/
Metacafe http://www.metacafe.com/
Magisto http://www.magisto.com/
Khan Academy https://www.khanacademy.org/
Internet Archive https://archive.org/
Instagram https://instagram.com/
InfoQ http://www.infoq.com/presentations/
Imgur http://imgur.com/
Heavy Music Archive http://www.heavy-music.ru/
Freesound http://www.freesound.org/
Flickr https://www.flickr.com/
FC2 Video http://video.fc2.com/
Facebook https://www.facebook.com/
eHow http://www.ehow.com/
Dailymotion http://www.dailymotion.com/
Coub http://coub.com/
CBS http://www.cbs.com/
Bandcamp http://bandcamp.com/
AliveThai http://alive.in.th/
interest.me http://ch.interest.me/tvn
755
ナナゴーゴー
http://7gogo.jp/
niconico
ニコニコ動画
http://www.nicovideo.jp/
163
网易视频
网易云音乐
http://v.163.com/
http://music.163.com/
56网 http://www.56.com/
AcFun http://www.acfun.cn/
Baidu
百度贴吧
http://tieba.baidu.com/
爆米花网 http://www.baomihua.com/
bilibili
哔哩哔哩
http://www.bilibili.com/
豆瓣 http://www.douban.com/
斗鱼 http://www.douyutv.com/
凤凰视频 http://v.ifeng.com/
风行网 http://www.fun.tv/
iQIYI
爱奇艺
http://www.iqiyi.com/
激动网 http://www.joy.cn/
酷6网 http://www.ku6.com/
酷狗音乐 http://www.kugou.com/
酷我音乐 http://www.kuwo.cn/
乐视网 http://www.le.com/
荔枝FM http://www.lizhi.fm/
懒人听书 http://www.lrts.me/
秒拍 http://www.miaopai.com/
MioMio弹幕网 http://www.miomio.tv/
MissEvan
猫耳FM
http://www.missevan.com/
痞客邦 https://www.pixnet.net/
PPTV聚力 http://www.pptv.com/
齐鲁网 http://v.iqilu.com/
QQ
腾讯视频
http://v.qq.com/
企鹅直播 http://live.qq.com/
Sina
新浪视频
微博秒拍视频
http://video.sina.com.cn/
http://video.weibo.com/
Sohu
搜狐视频
http://tv.sohu.com/
Tudou
土豆
http://www.tudou.com/
虾米 http://www.xiami.com/
阳光卫视 http://www.isuntv.com/
Youku
优酷
http://www.youku.com/
战旗TV http://www.zhanqi.tv/lives
央视网 http://www.cntv.cn/
Naver
네이버
http://tvcast.naver.com/
芒果TV http://www.mgtv.com/
火猫TV http://www.huomao.com/
阳光宽频网 http://www.365yg.com/
西瓜视频 https://www.ixigua.com/
新片场 https://www.xinpianchang.com/
快手 https://www.kuaishou.com/
抖音 https://www.douyin.com/
TikTok https://www.tiktok.com/
中国体育(TV) http://v.zhibo.tv/
http://video.zhibo.tv/
知乎 https://www.zhihu.com/

这就是您可能要使用它的原因:

  • 您在Internet上享受了一些东西,只是想自己下载就可以了。
  • 您可以从计算机上在线观看喜欢的视频,但禁止保存它们。您感觉自己无法控制自己的计算机。(这不是开放网络应该如何工作的。)
  • 您想摆脱任何封闭源技术或专有JavaScript代码,并禁止在计算机上运行Flash之类的东西。
  • 您是黑客文化和免费软件的拥护者。

you-get可以为您服务:

  • 从YouTube,Youku,Niconico等流行网站下载视频/音频,等等。(请参阅上方支持的网站的完整列表)
  • 在媒体播放器中流式传输在线视频。没有网络浏览器,没有更多广告。
  • 通过抓取网页下载(感兴趣的)图像。
  • 下载任意非HTML内容,即二进制文件。

1.安装

1.1先决条件

需要以下依赖项:

  • Python 3.2或以上
  • FFmpeg 1.0或以上
  • (可选)RTMPDump

Python安装可见:Python 教程 0 安装Python (windows, macOS)

FFmpeg安装:

安装Pydub前需要先安装ffmpeg:

Mac (打开终端(Terminal), 用 homebrew 安装):

brew install ffmpeg withlibvorbis withsdl2 withtheora

Linux:

aptget install ffmpeg libavcodecextra

Windows:

1. 进入 http://ffmpeg.org/download.html#build-windows,点击 windows 对应的图标,进入下载界面点击 download 下载按钮,
2. 解压下载好的zip文件到指定目录
3. 将解压后的文件目录中 bin 目录(包含 ffmpeg.exe )添加进 path 环境变量中

选项1:通过pip安装

请注意,您必须使用Python 3版本pip

$ pip3 install you-get

选项2:从本站下载

下载本站提供的you-get.zip。解压缩它,然后将包含you-get脚本的目录放入您的中PATH

或者,运行

$ [sudo] python3 setup.py install

或者

$ python3 setup.py install --user

安装you-get到永久路径。

2.升级

根据您选择安装的选项you-get,可以通过以下方式进行升级:

$ pip3 install --upgrade you-get

或通过以下方式下载最新版本:

$ you-get https://github.com/soimort/you-get/archive/master.zip

为了在develop不弄乱PIP的情况下获得最新的分支,可以尝试:

$ pip3 install --upgrade git+https://github.com/soimort/you-get@develop

3.入门

3.1下载影片

收到感兴趣的视频后,您可能需要使用--info/-i选项查看所有可用的质量和格式:

$ you-get -i 'https://www.youtube.com/watch?v=jNQXAC9IVRw'
site:                YouTube
title:               Me at the zoo
streams:             # Available quality and codecs
    [ DASH ] ____________________________________
    - itag:          242
      container:     webm
      quality:       320x240
      size:          0.6 MiB (618358 bytes)
    # download-with: you-get --itag=242 [URL]

    - itag:          395
      container:     mp4
      quality:       320x240
      size:          0.5 MiB (550743 bytes)
    # download-with: you-get --itag=395 [URL]

    - itag:          133
      container:     mp4
      quality:       320x240
      size:          0.5 MiB (498558 bytes)
    # download-with: you-get --itag=133 [URL]

    - itag:          278
      container:     webm
      quality:       192x144
      size:          0.4 MiB (392857 bytes)
    # download-with: you-get --itag=278 [URL]

    - itag:          160
      container:     mp4
      quality:       192x144
      size:          0.4 MiB (370882 bytes)
    # download-with: you-get --itag=160 [URL]

    - itag:          394
      container:     mp4
      quality:       192x144
      size:          0.4 MiB (367261 bytes)
    # download-with: you-get --itag=394 [URL]

    [ DEFAULT ] _________________________________
    - itag:          43
      container:     webm
      quality:       medium
      size:          0.5 MiB (568748 bytes)
    # download-with: you-get --itag=43 [URL]

    - itag:          18
      container:     mp4
      quality:       small
    # download-with: you-get --itag=18 [URL]

    - itag:          36
      container:     3gp
      quality:       small
    # download-with: you-get --itag=36 [URL]

    - itag:          17
      container:     3gp
      quality:       small
    # download-with: you-get --itag=17 [URL]

默认情况下,顶部的是您将获得的一个。如果这对您来说很酷,请下载:

$ you-get 'https://www.youtube.com/watch?v=jNQXAC9IVRw'
site:                YouTube
title:               Me at the zoo
stream:
    - itag:          242
      container:     webm
      quality:       320x240
      size:          0.6 MiB (618358 bytes)
    # download-with: you-get --itag=242 [URL]

Downloading Me at the zoo.webm ...
 100% (  0.6/  0.6MB) ├██████████████████████████████████████████████████████████████████████████████┤[2/2]    2 MB/s
Merging video parts... Merged into Me at the zoo.webm

Saving Me at the zoo.en.srt ... Done.

或者,如果您喜欢其他格式(mp4),则只需使用you-get显示的选项即可:

$ you-get --itag=18 'https://www.youtube.com/watch?v=jNQXAC9IVRw'

注意:

  • 目前,我们大多数受支持的网站尚未实现格式选择;在这种情况下,默认的下载格式是质量最高的格式。
  • ffmpeg 是必需的依赖项,用于下载和加入分多个部分(例如,在优酷等某些网站上)流式传输的视频以及1080p或高分辨率的YouTube视频。
  • 如果您不想you-get在下载后加入视频部分,请使用--no-merge/-n选项。

4.下载其他内容

如果您已经有了想要的确切资源的URL,则可以使用以下方法直接下载它:

$ you-get https://stallman.org/rms.jpg
Site:       stallman.org
Title:      rms
Type:       JPEG Image (image/jpeg)
Size:       0.06 MiB (66482 Bytes)

Downloading rms.jpg ...
100.0% (  0.1/0.1  MB) ├████████████████████████████████████████┤[1/1]  127 kB/s

否则,you-get将抓取网页并尝试找出是否有您感兴趣的东西:

$ you-get http://kopasas.tumblr.com/post/69361932517
Site:       Tumblr.com
Title:      kopasas
Type:       Unknown type (None)
Size:       0.51 MiB (536583 Bytes)

Site:       Tumblr.com
Title:      tumblr_mxhg13jx4n1sftq6do1_1280
Type:       Portable Network Graphics (image/png)
Size:       0.51 MiB (536583 Bytes)

Downloading tumblr_mxhg13jx4n1sftq6do1_1280.png ...
100.0% (  0.5/0.5  MB) ├████████████████████████████████████████┤[1/1]   22 MB/s

注意:

  • 此功能是实验性功能,远非完美。它最适合从Tumblr和Blogger等受欢迎的网站上抓取大尺寸图像,但是实际上没有通用模式可应用于Internet上的任何网站。

5.在Google视频中搜索并下载

您可以将任何内容传递给you-get。如果该网址无效,you-get将进行Google搜索并为您下载最相关的视频。(这可能不完全是您希望看到的东西,但仍然很有可能。)

$ you-get "Richard Stallman eats"

6.暂停并继续下载

您可以使用Ctrl+C中断下载。

临时.download文件保留在输出目录中。下次you-get使用相同的参数运行时,下载进度将从上一个会话恢复。如果文件已完全下载(临时.download扩展名已消失),you-get则将跳过下载。

要强制重新下载,请使用--force/-f选项。(警告:这样做会覆盖任何同名的现有文件或临时文件!)

7.设置下载文件的路径和名称

使用--output-dir/-o选项设置路径,并使用--output-filename/-O设置下载文件的名称:

$ you-get -o ~/Videos -O zoo.webm 'https://www.youtube.com/watch?v=jNQXAC9IVRw'

提示:

  • 如果您遇到默认视频标题的问题,这些选项会很有用,默认视频标题可能包含特殊字符,这些特殊字符在当前的shell /操作系统/文件系统中无法很好地播放。
  • 如果编写脚本来批量下载文件并将其放入具有指定名称的指定文件夹中,这些选项也很有用。

8.代理设定

您可以you-get通过--http-proxy/-x选项指定要使用的HTTP代理:

$ you-get -x 127.0.0.1:8087 'https://www.youtube.com/watch?v=jNQXAC9IVRw'

但是,http_proxy默认情况下将应用系统代理设置(即环境变量)。要禁用任何代理,请使用该--no-proxy选项。

提示:

  • 如果你需要使用代理了很多(如果您的网络阻止某些网站),你可能希望使用you-getproxychains和集alias you-get="proxychains -q you-get"(Bash中)。
  • 对于某些网站(例如,优酷网),如果您需要访问某些仅在中国大陆可用的视频,则可以选择使用特定的代理从站点中提取视频信息:--extractor-proxy-y

9.观看影片

使用--player/-p选项将视频输入到您选择的媒体播放器中,例如mpvvlc,而不是下载它:

$ you-get -p vlc 'https://www.youtube.com/watch?v=jNQXAC9IVRw'

或者,如果您希望在浏览器中观看视频,而没有广告或评论部分:

$ you-get -p chromium 'https://www.youtube.com/watch?v=jNQXAC9IVRw'

提示:

  • 可以使用该-p选项启动另一个下载管理器,例如you-get -p uget-gtk 'https://www.youtube.com/watch?v=jNQXAC9IVRw',尽管它们可能无法很好地配合使用。

10.加载cookie

并非所有人都可以公开获得所有视频。如果您需要登录帐户以访问某些内容(例如私人视频),则不可避免地需要you-get通过--cookies/-c选项将浏览器Cookie馈入。

注意:

  • 到目前为止,我们支持两种浏览器cookie格式:Mozillacookies.sqlite和Netscape cookies.txt

11.重用提取的数据

使用--url/-u获取从页面提取的可下载资源URL的列表。使用--json得到一个抽象提取数据的JSON格式。

警告:

  • 暂且,这个功能已经被稳定和JSON模式可能在未来的重大更改。

Python 3.9 你所需要知道的都在这里

1.字典合并与更新运算符

在Python3.9以前,你可能需要这样合并字典:

d1 = {'name': 'revotu', 'age': 99}
d2 = {'age': 24, 'sex': 'male'}

# 方法1,使用两次update方法向字典中添加元素
d = {}
d.update(d1)             
d.update(d2)
print(d)

# 方法2,先复制,后更新,缺点是增加了一个临时变量
d = d1.copy()            
d.update(d2)
print(d)

# 方法3,字典构造器
d = dict(d1)               
d.update(d2)
print(d)

# 方法4,关键字参数hack
# 只有一行代码,看上去很酷,缺点是这种hack技巧只有在字典的键是字符串时才有效。
d = dict(d1, **d2)
print(d)

# 方法5,字典推导式,字典推导式方法满足要求,只是嵌套的字典推导式,不那么清晰,不易于理解。
d = {k: v for d in [d1, d2] for k, v in d.items()}   
print(d)

# 方法6,元素拼接
d = dict(list(d1.items()) + list(d2.items()))        
print(d)

# 方法7,chain items
from itertools import chain
d = dict(chain(d1.items(), d2.items()))
print(d)

# 方法8,itemscollections.ChainMap可以将多个字典或映射,在逻辑上将它们合并为一个单独的映射结构
# 这种方法也很pythonic,而且也是通用方法
from collections import ChainMap
d = dict(ChainMap(d1, d2))                      
print(d)

# 方法9,字典拆分,在Python3.5+中,可以使用一种全新的字典合并方式,这行代码很pythonic
# 缺点是有点让人看不懂
d = {**d1, **d2}
print(d)

现在,Python 3.9之后,合并 (|) 与更新 (|=) 运算符已被加入内置的 dict 类。 它们为现有的 dict.update 和 {**d1, **d2} 字典合并方法提供了补充。

>>> x = {"key1": "value1 from x", "key2": "value2 from x"}
>>> y = {"key2": "value2 from y", "key3": "value3 from y"}
>>> x | y
{'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
>>> y | x
{'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}

2.新增用于移除前缀和后缀的字符串方法

增加了 str.removeprefix(prefix) 和 str.removesuffix(suffix) 用于方便地从字符串移除不需要的前缀或后缀。 也增加了 bytesbytearray 以及 collections.UserString 的对应方法。

内置的str类将获得两个新方法,它们的源代码如下:

def removeprefix(self: str, prefix: str, /) -> str:
    if self.startswith(prefix):
        return self[len(prefix):]
    else:
        return self[:]

def removesuffix(self: str, suffix: str, /) -> str:
    # suffix='' should not call self[:-0].
    if suffix and self.endswith(suffix):
        return self[:-len(suffix)]
    else:
        return self[:]

它的使用方法如下:

>> "HelloWorld".removesuffix("World")
'Hello'
>> "HelloWorld".removeprefix("Hello")
'World'

3.类型标注支持更多通用类型

在类型标注中现在你可以使用内置多项集类型例如 list 和 dict 作为通用类型而不必从 typing 导入对应的大写形式类型名 (例如 List 和 Dict)。

比如:

def greet_all(names: list[str]) -> None:
    for name in names:
        print("Hello", name)

4.标准库新增 zoneinfo 模块

zoneinfo 模块为标准库引入了 IANA 时区数据库。 它添加了 zoneinfo.ZoneInfo,这是一个基于系统时区数据的实体 datetime.tzinfo 实现。

>>> from zoneinfo import ZoneInfo
>>> from datetime import datetime, timedelta

>>> # 夏时制 - 07:00
>>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
>>> print(dt)
2020-10-31 12:00:00-07:00
>>> dt.tzname()
'PDT'

>>> # 加7天,夏时制结束 - 08:00
>>> dt += timedelta(days=7)
>>> print(dt)
2020-11-07 12:00:00-08:00
>>> print(dt.tzname())
PST

5.标准库新增 graphlib 模块

支持针对图的操作,比如获取拓扑排序:

>>> from graphlib import TopologicalSorter
>>> graph = {"D": {"B", "C"}, "C": {"A"}, "B": {"A"}}
>>> ts = TopologicalSorter(graph)
>>> tuple(ts.static_order())
('A', 'C', 'B', 'D')

更多可见:https://docs.python.org/zh-cn/3/library/graphlib.html#module-graphlib

6.Math模块迎来调整

以前gcd计算最大公因数的函数只能应用于2个数字,这就很蛋疼,我们必须使用 math.gcd(80, math.gcd(64, 152))来处理大于2个数字的情况。而现在 gcd 允许计算任意数量的数字:

import math

# Greatest common divisor
math.gcd(80, 64, 152)
# 8

并新增了一个函数,计算最小公倍数:

# 最小公倍数
math.lcm(4, 8, 5)
# 40

用法与gcd一样,它允许可变数量的参数。

7.os模块

以前Windows系统下是无法使用 os.unsetenv 的,这个问题在Python3.9已被修复。现在Windows系统也支持 os.unsetenv 了:

def __init__(self, *args, **kw):
    if hasattr(os, 'unsetenv'):
        os.unsetenv('_MEIPASS2')
    else:
        os.putenv('_MEIPASS2', '')

8.random模块: 新增随机字节串

现在你可以使用random下的randbytes函数随机生成字节:

>> from random import randbytes
>> randbytes(4)
b'\xf3\xf5\xf8\x98'

9.性能优化

重点优化:

1.多个 Python 内置类型 (rangetuplesetfrozensetlistdict) 现在通过使用 PEP 590 向量调用协议得到加速。

2.优化了在推导式中为临时变量赋值的惯用方式。 现在推导式中的 for y in [expr] 会与简单赋值语句 y = expr 一样快速。 例如:

sums = [s for s in [0] for x in data for s in [s + x]]

不同于 := 运算符,这个惯用方式不会使变量泄露到外部作用域中。

3.优化了多线程应用的信号处理。 如果一个线程不是获得信号的主线程,字节码求值循环不会在每条字节码指令上被打断以检查无法被处理的挂起信号。 只有主解释器的主线程能够处理信号。

以下是对从 Python 3.4 到 Python 3.9 的性能提升情况的总结:

Python version                       3.4     3.5     3.6     3.7     3.8    3.9
--------------                       ---     ---     ---     ---     ---    ---

Variable and attribute read access:
    read_local                       7.1     7.1     5.4     5.1     3.9    3.9
    read_nonlocal                    7.1     8.1     5.8     5.4     4.4    4.5
    read_global                     15.5    19.0    14.3    13.6     7.6    7.8
    read_builtin                    21.1    21.6    18.5    19.0     7.5    7.8
    read_classvar_from_class        25.6    26.5    20.7    19.5    18.4   17.9
    read_classvar_from_instance     22.8    23.5    18.8    17.1    16.4   16.9
    read_instancevar                32.4    33.1    28.0    26.3    25.4   25.3
    read_instancevar_slots          27.8    31.3    20.8    20.8    20.2   20.5
    read_namedtuple                 73.8    57.5    45.0    46.8    18.4   18.7
    read_boundmethod                37.6    37.9    29.6    26.9    27.7   41.1

Variable and attribute write access:
    write_local                      8.7     9.3     5.5     5.3     4.3    4.3
    write_nonlocal                  10.5    11.1     5.6     5.5     4.7    4.8
    write_global                    19.7    21.2    18.0    18.0    15.8   16.7
    write_classvar                  92.9    96.0   104.6   102.1    39.2   39.8
    write_instancevar               44.6    45.8    40.0    38.9    35.5   37.4
    write_instancevar_slots         35.6    36.1    27.3    26.6    25.7   25.8

Data structure read access:
    read_list                       24.2    24.5    20.8    20.8    19.0   19.5
    read_deque                      24.7    25.5    20.2    20.6    19.8   20.2
    read_dict                       24.3    25.7    22.3    23.0    21.0   22.4
    read_strdict                    22.6    24.3    19.5    21.2    18.9   21.5

Data structure write access:
    write_list                      27.1    28.5    22.5    21.6    20.0   20.0
    write_deque                     28.7    30.1    22.7    21.8    23.5   21.7
    write_dict                      31.4    33.3    29.3    29.2    24.7   25.4
    write_strdict                   28.4    29.9    27.5    25.2    23.1   24.5

Stack (or queue) operations:
    list_append_pop                 93.4   112.7    75.4    74.2    50.8   50.6
    deque_append_pop                43.5    57.0    49.4    49.2    42.5   44.2
    deque_append_popleft            43.7    57.3    49.7    49.7    42.8   46.4

Timing loop:
    loop_overhead                    0.5     0.6     0.4     0.3     0.3    0.3

可以看到,Python 3.9 相比于 Python 3.6 提升还是非常明显的,比如在列表的append 和 pop 操作上,性能提升了30%、在全局变量的读取上,性能提高了45%。

如果你的项目比较小型,升级到Python3.9的成本问题和依赖问题不多,还是非常推荐升级的。

10.未来可期

这一个更改你可能看不见、摸不着,但它可能改变Python的未来。

以前Python使用 LL(1) 解析器,从Python 3.9 开始,将使用 PEG 解析器,官方认为,PEG 在设计新语言特性时的形式化比 LL(1) 更灵活。

因此,请期待Python 3.10,Python团队或许能给我们带来更多的惊喜!

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!


​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

Pandas 性能优化

Python 漂亮的新型绘图库 — PyG2Plot 实战教程

最近看了一篇文章《一个牛逼的Python 可视化库:PyG2Plot》,可惜只是简单介绍,并且只有一个简陋的官方示例。

经过小五一番测试成功复现了其中一个示例图片,还很精致。今天正好把完整过程分享给大家,看看这个新库绘图也可以这么漂亮!

Python可视化新秀

这个Python可视化新秀,在GitHub上是这样介绍的:

🎨 PyG2Plot 是@AntV/G2Plot 在 Python3 上的封装。G2Plot 是一套简单、易用、并具备一定扩展能力和组合能力的统计图表库,基于图形语法理论搭建而成。

不过研究PyG2Plot还得先从G2开始讲,它是蚂蚁金服开源一个基于图形语法,面向数据分析的统计图表引擎。后来又在其基础上,封装出业务上常用的统计图表库——G2Plot

图片

不过现在Python这么热,几乎每一个nb的前端可视化库,最终都会被用python开发一套生成相应html的库!它也不例外,封装出了Python可视化库——PyG2Plot

在GitHub上,也提供了一张示例图,我对右下角的散点图比较感兴趣。

图片

结果兴致勃勃地去看示例,这简直买家秀与卖家秀啊!

图片

我不管,我就要右边那个👉

自己动手,丰衣足食

看来还是需要自己动手,那就先安装PyG2Plot库吧

pip install pyg2plot

目前目前 pyg2plot 只提供简单的一个 API,只列出需要的参数

  • Plot
  1. Plot(plot_type: str): 获取 Plot 对应的类实例。
  2. plot.set_options(options: object): 给图表实例设置一个 G2Plot 图形的配置。
  3. plot.render(path, env, **kwargs): 渲染出一个 HTML 文件,同时可以传入文件的路径,以及 jinja2 env 和 kwargs 参数。
  4. plot.render_notebook(env, **kwargs): 将图形渲染到 jupyter 的预览。

于是我们可以先导入Plot方法

from pyg2plot import Plot

我们要画散点图

scatter = Plot("Scatter")

下一步就是要获取数据和设置参数plot.set_options(),这里获取数据直接利用requset解析案例json,而参数让我在后面一一道来:

import requests

#请求地址
url = "https://gw.alipayobjects.com/os/bmw-prod/0b37279d-1674-42b4-b285-29683747ad9a.json"

#发送get请求
a = requests.get(url)

#获取返回的json数据,并赋值给data
data = a.json()
图片

成功获取解析好的对象集合数据。

下面是对着参数,一顿操作猛如虎:

scatter.set_options(
{
    'appendPadding'30,
    'data': data,
    'xField''change in female rate',
    'yField''change in male rate',
    'sizeField''pop',
    'colorField''continent',
    'color': ['#ffd500''#82cab2''#193442''#d18768','#7e827a'],
    'size': [430],
    'shape''circle',
    'pointStyle':{'fillOpacity'0.8,'stroke''#bbb'},
    'xAxis':{'line':{'style':{'stroke''#aaa'}},},
    'yAxis':{'line':{'style':{'stroke''#aaa'}},},
    'quadrant':{
        'xBaseline'0,
        'yBaseline'0,
        'labels': [
        {'content''Male decrease,\nfemale increase'},
        {'content''Female decrease,\nmale increase'},
        {'content''Female & male decrease'},
        {'content''Female &\n male increase'}, ],},
})

如果在Jupyter notebook中预览的话,则执行下方语句

scatter.render_notebook()

如果想渲染出完整的html的话,则执行下方语句

scatter.render("散点图.html")

看一下成果吧

图片

参数解析&完整代码

各位看官,这块可能比较无聊,可以直接划到文末或者点击收藏。

主要还是详解一下刚才scatter.set_options()里的参数,方便大家后续自己改造!

分成几个部分一点一点解释:

参数解释 一

'appendPadding'30#①
'data': data, #②
'xField''change in female rate'#③
'yField''change in male rate'

① 图表在上右下左的间距,加不加这个参数具体看下图

图片

② 设置图表数据源(其中data在前面已经赋值了),这里的数据源为对象集合,例如:[{ time: ‘1991’,value: 20 }, { time: ‘1992’,value: 20 }]。

xFieldyField这两个参数分别是横/纵向的坐标轴对应的字段。

参数解释 二

'sizeField''pop'#④
'colorField''continent'#⑤
'color': ['#ffd500''#82cab2''#193442''#d18768','#7e827a'], #⑥
'size': [430], #⑦
'shape''circle'#⑧

④ 指定散点大小对应的字段名,我们用的pop(人口)字段。

⑤ 指定散点颜色对应的字段名,我们用的continent(洲)字段。

图片

⑥ 设置散点的颜色,指定了系列色值。

⑦ 设置散点的大小,可以指定大小数组 [minSize, maxSize]

⑧ 设置点的形状,比如ciclesquare

参数解释 三

'pointStyle':{'fillOpacity'0.8,'stroke''#bbb'}, #⑨
'xAxis':{'line':{'style':{'stroke''#aaa'}},}, #⑩
'yAxis':{'line':{'style':{'stroke''#aaa'}},},

pointStyle是指折线样式,不过在散点图里,指的是散点的描边。另外fillOpacity是设置透明度,stroke是设置描边颜色。

图片

⑩ 这里只是设置了坐标轴线的颜色。

参数解释 四

'quadrant':{
    'xBaseline'0,
    'yBaseline'0,
    'labels': [
    {'content''Male decrease,\nfemale increase'},
    {'content''Female decrease,\nmale increase'},
    {'content''Female & male decrease'},
    {'content''Female &\n male increase'}, ],},

quadrant是四象限组件,具体细分配置如下:

细分配置 功能描述
xBaseline x 方向上的象限分割基准线,默认为 0
yBaseline y 方向上的象限分割基准线,默认为 0
labels 象限文本配置

PyG2Plot的介绍文档还不完善,上文中的很多参数是摸索的,大家作为参考就好。

图片

PyG2Plot 原理其实非常简单,其中借鉴了 pyecharts 的实现,但是因为蚂蚁金服的 G2Plot 完全基于可视分析理论的配置式结构,所以封装上比 pyecharts 简洁非常非常多。

本文转自快学Python.

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!


​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

Pandas 性能优化

如何使用Python预测机票价格

印度的机票价格基于供需关系浮动,很少受到监管机构的限制。因此它通常被认为是不可预测的,而动态定价机制更增添了人们的困惑。

我们的目的是建立一个机器学习模型,根据历史数据预测未来航班的价格,这些航班价格可以给客户或航空公司服务提供商作为参考价格。

image.png

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。

如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.

此外,推荐大家用VSCode编辑器来编写小型Python项目:Python 编程的最好搭档—VSCode 详细指南

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),输入命令安装依赖:

pip install pandas
pip install numpy
pip install matplotlib
pip install seaborn
pip install scikit-learn

2.导入相关数据集

本文的数据集是 Data_Train.xlsx,首先看看训练集的格式:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')


flights = pd.read_excel('./Data_Train.xlsx')
flights.head()

可见训练集中的字段有航空公司(Airline)、日期(Date_of_Journey)、始发站(Source)、终点站(Destination)、路线(Route)、起飞时间(Dep_Time)、抵达时间(Arrival_Time)、历经时长(Duration)、总计停留站点个数(Total_Stops)、额外信息(Additional_Info),最后是机票价格(Price)。

与其相对的测试集,除了缺少价格字段之外,与训练集的其他所有字段均一致。

访问:https://pythondict.com/download/predict-ticket/

或在Python实用宝典后台回复:预测机票,下载完整数据源和代码。

3.探索性数据分析

3.1 清理缺失数据

看看所有字段的基本信息:

flights.info()

其他的非零值数量均为10683,只有路线和停靠站点数是10682,说明这两个字段缺少了一个值。

谨慎起见,我们删掉缺少数据的行:

# clearing the missing data
flights.dropna(inplace=True)
flights.info()

现在非零值达到一致数量,数据清理完毕。

3.2 航班公司分布特征

接下来看看航空公司的分布特征:

sns.countplot('Airline', data=flights)
plt.xticks(rotation=90)
plt.show()

前三名的航空公司分别是 IndiGo, Air India, JetAirways.

其中可能存在廉价航空公司。

3.3 再来看看始发地的分布

sns.countplot('Source',data=flights)
plt.xticks(rotation=90)
plt.show()

某些地区可能是冷门地区,存在冷门机票的可能性比较大。

3.4 停靠站点的数量分布

sns.countplot('Total_Stops',data=flights)
plt.xticks(rotation=90)
plt.show()

看来大部分航班在飞行途中只停靠一次或无停靠。

会不会某些停靠多的航班比较便宜?

3.5 有多少数据含有额外信息

plot=plt.figure()
sns.countplot('Additional_Info',data=flights)
plt.xticks(rotation=90)

大部分航班信息中都没有包含额外信息,除了部分航班信息有:不包含飞机餐、不包含免费托运。

这个信息挺重要的,是否不包含这两项服务的飞机机票比较便宜?

3.6 时间维度分析

首先转换时间格式:

flights['Date_of_Journey'] = pd.to_datetime(flights['Date_of_Journey'])
flights['Dep_Time'] = pd.to_datetime(flights['Dep_Time'],format='%H:%M:%S').dt.time

接下来,研究一下出发时间和价格的关系:

flights['weekday'] = flights[['Date_of_Journey']].apply(lambda x:x.dt.day_name())
sns.barplot('weekday','Price',data=flights)
plt.show()

大体上价格没有差别,说明这个特征是无效的。

那么月份和机票价格的关系呢?

flights["month"] = flights['Date_of_Journey'].map(lambda x: x.month_name())
sns.barplot('month','Price',data=flights)
plt.show()

没想到4月的机票价格均价只是其他月份的一半,看来4月份是印度的出行淡季吧。

起飞时间和价格的关系

flights['Dep_Time'] = flights['Dep_Time'].apply(lambda x:x.hour)
flights['Dep_Time'] = pd.to_numeric(flights['Dep_Time'])
sns.barplot('Dep_Time','Price',data=flights)
plot.show()

可以看到,红眼航班(半夜及早上)的机票比较便宜,这是符合我们的认知的。

3.7 清除无效特征

把那些和价格没有关联关系的字段直接去除掉:

flights.drop(['Route','Arrival_Time','Date_of_Journey'],axis=1,inplace=True)
flights.head()

4.模型训练

接下来,我们可以准备使用模型来预测机票价格了,不过,还需要对数据进行预处理和特征缩放。

4.1 数据预处理

将字符串变量使用数字替代:

from sklearn.preprocessing import LabelEncoder
var_mod = ['Airline','Source','Destination','Additional_Info','Total_Stops','weekday','month','Dep_Time']
le = LabelEncoder()
for i in var_mod:
    flights[i] = le.fit_transform(flights[i])
flights.head()

对每列数据进行特征缩放,提取自变量(x)和因变量(y):

flights.corr()
def outlier(df):
    for i in df.describe().columns:
        Q1=df.describe().at['25%',i]
        Q3=df.describe().at['75%',i]
        IQR= Q3-Q1
        LE=Q1-1.5*IQR
        UE=Q3+1.5*IQR
        df[i]=df[i].mask(df[i]<LE,LE)
        df[i]=df[i].mask(df[i]>UE,UE)
    return df
flights = outlier(flights)
x = flights.drop('Price',axis=1)
y = flights['Price']

划分测试集和训练集:

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=101)

4.2 模型训练及测试

使用随机森林进行模型训练:

from sklearn.ensemble import RandomForestRegressor
rfr=RandomForestRegressor(n_estimators=100)
rfr.fit(x_train,y_train)

在随机森林中,我们有一种根据数据的相关性来确定特征重要性的方法:

features=x.columns
importances = rfr.feature_importances_
indices = np.argsort(importances)
plt.figure(1)
plt.title('Feature Importances')
plt.barh(range(len(indices)), importances[indices], color='b', align='center')
plt.yticks(range(len(indices)), features[indices])
plt.xlabel('Relative Importance')

可以看到,Duration(飞行时长)是影响最大的因子。

对划分的测试集进行预测,得到结果:

predictions=rfr.predict(x_test)
plt.scatter(y_test,predictions)
plt.show()

这样看不是很直观,接下来我们要数字化地评价这个模型。

4.3 模型评价

sklearn 提供了非常方便的函数来评价模型,那就是 metrics :

from sklearn import metrics
print('MAE:', metrics.mean_absolute_error(y_test, predictions))
print('MSE:', metrics.mean_squared_error(y_test, predictions))
print('RMSE:', np.sqrt(metrics.mean_squared_error(y_test, predictions)))
print('r2_score:', (metrics.r2_score(y_test, predictions)))
MAE: 1453.9350628905618
MSE: 4506308.3645551
RMSE: 2122.806718605135
r2_score: 0.7532074710409375

这4个值中你可以只关注R2_score,r2越接近1说明模型效果越好,这个模型的分数是0.75,算是很不错的模型了。

看看其残差直方图是否符合正态分布:

sns.distplot((y_test-predictions),bins=50)
plt.show()

不错,多数预测结果和真实值都在-1000到1000的范围内,算是可以接受的结果。其残差直方图也基本符合正态分布,说明模型是有效果的。

部分译自 https://www.kaggle.com/harikrishna9/how-to-predict-flight-ticket-price/notebook,有较多的增删。

我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!


​Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典

Pandas 性能优化

有趣好用的Python教程