哪些 Python 库让你相见恨晚?

关注者
53,509
被浏览
12,269,635

499 个回答

这个综述项目想必都知道吧。

https://github.com/vinta/awesome-python

推荐一波爬虫库供玩耍吧,参考

1、awesome-spider

地址:https://github.com/facert/awesome-spider

这是ID为facert的一个知乎工程师开源的,star6000+,内容如下:

这一款爬虫,里面搜集了几乎所有可以爬取的中文网址,从知乎豆瓣到知网,抖音微博到QQ,还有很多的不可描述的网站,你懂的。

2、Nyspider

地址:https://github.com/Nyloner/Nyspider

这是ID为Nyloner的一个今日头条的工程师弄的,star1000+,风格与上面的项目大有不同。

可以看出,都是各类网址。这很头条,跟这位小哥哥的工作内容估计有关系。

3、awesome-python-login-model

地址:https://github.com/CriseLYJ/awesome-python-login-model

这是ID为CriseLYJ(职业不详)的用户,这个项目用于模拟各种网址登陆,也包含一些简单的爬虫,star6000+。

先从这个项目开始分析各大网站的登录方式,非常有用,可谓摸清对手再动手。

4、python-spider

地址:https://github.com/Jack-Cherish/python-spider

这是ID为Jack-Cherish的东北大学的一个学生整理的学习python爬虫的资料,star6000+,包含不少的实战项目,非常适合想学习的朋友。

其他还有一些项目,不再一一介绍。

https://github.com/jhao104/proxy_pool
https://github.com/Ehco1996/Python-crawler

--------------------------------------此处是分割线--------------------------------------

如果你是做图像的,我再推荐两个功能强大,简单好用的图片和视频爬虫。工具亲测长期有效,省去了很多找爬虫工具的时间,早用早好。

1、Google,Baidu,Bing三大搜素引擎图片爬虫

地址:https://github.com/sczhengyabin/Image-Downloader

这个爬虫由ID为sczhengyabin的用户整理,可以按要求爬取百度、Bing、Google上的图片,我已经用了几年了,提供了非常人性化的GUI方便操作,使用方法如下:

使用python image_downloader_gui.py调用GUI界面,配置好参数(关键词,路径,爬取数目等),关键词可以直接在这里输入也可以选择从txt文件中选择。

可以配置需要爬取的样本数目,这里一次爬了2000张,妥妥的3分钟搞定。

这个爬虫足够满足小型项目初始数据集的积累(爬几千张高质量图片妥妥的),结果命名也非常整齐规范,最大的优势就是稳定啊,不会三天两天不能用了。

2、各大视频网站爬虫

地址:https://github.com/iawia002/annie

由ID为iawia002的用户整理,Annie是一款以go语言编码的视频下载工具,使用便捷并支持youtube,腾讯视频,抖音等多个网站视频和图像的下载,收录站点如下,可以说是该有的都有的:

虽然这个项目可以下载图片,但是我们还是来用它下载视频吧,使用方法很简单:

annie [可选参数]http://…  (视频网址)

视频会下载到当前目录,至于那些可选参数,赶紧去摸索吧。

又到了年终盘点时间,Tryo Labs 和去年一样推出了2016 年十大 Python 库的榜单。对于这份榜单的筛选条件,Tryo Labs 写道:「我们避开了 Django、Flask 等已经成为今天的标准库的已经成功的项目。另外,这个榜单中有的库是 2016 年之前建立的,但它们在今年的受欢迎度出现了暴增或我们认为它们非常好所以可以进入这个榜单。」下面是榜单详情:

1. Zappa


链接:Serverless Python Web Services


自 AWS Lambda(以及后续的其它项目)发布以来,人们的关注点就全部转移到了无服务器架构上。这些架构让我们可以将微服务(microservice)部署到云端、部署到一个完全可管理的环境中;在这样的环境中,人们不用关心管任何服务器,而只需要分配无状态的、短暂的计算容器(computing container)即可——一个服务提供商即可完全管理。通过这一范式,事件(比如流量尖峰)可以触发更多这些容器的执行,因此有可能能够处理「无限的」水平扩展。


Zappa 是一个用于 Python 的无服务器框架,尽管(至少目前)它仅支持 AWS Lambda 和 AWS API Gateway。它使得开发这样架构的应用变得非常简单,能将你从使用 AWS Console 或 API 的繁琐配置工作中解放出来,而且它还有各种用于简化部署和管理不同环境的命令。


2. Sanic + uvloop


链接:

Sanic: channelcat/sanic

uvloop: uvloop: Blazing fast Python networking


谁说 Python 不能很快?Sanic 不仅有可能是有史以来最好的软件库名字,也可能是有史以来最快的 Python 网页框架,而且似乎也远远超过其它框架。它是一个专为速度而设计的类 Flask 的 Python 3.5+ 网页服务器。另一个库 uvloop 是一个用于 asyncio 的事件循环(event loop,其底层使用了 libuv)的超快速的插件替代。这两个加起来就是一个强大的组合!


根据 Sanic 的作者的基准测试,uvloop 可以驱动 Sanic 每秒处理超过 3.3 万条请求,这实在太强了!(比 node.js 还快)。你的代码可以受益于这种新的 async/await 语法——它们会看起来很整洁;此外我们也喜欢 Flask 风格的 API。你一定要试试 Sanic,而且如果你也在使用 asyncio,你也可以无需太多修改你的代码就能受益于 uvloop。


3. asyncpg


链接:MagicStack/asyncpg


跟进 asyncio 框架的最新进展,来自 MagicStack 的人为我们带来了这个高效的异步(目前只支持 CPython 3.5)数据库接口库,其是专门为 PostgreSQL 设计的。它有零相关性,这意味不需要安装 libpq。相对而言,withpsycopg2(最流行的 Python 的 PostgreSQL 适配器)需要以文本格式与数据库服务器交换数据;而 asyncpg 则实现了 PostgreSQL 二进制 I/O 协议,这让其不仅支持通用类型,而且还有其它许多性能上的好处。


其基准是很清楚的:asyncpg 平均至少比 psycopg2(或 aiopg)快 3 倍,也比 node.js 和 Go 实现更快。


4. boto3


链接:boto/boto3


如果你的基础设施部署在 AWS 上或使用了它们的服务(比如 S3),那么你应该非常乐意看到 boto(用于 AWS API 的 Python 接口)被从头到尾完整重写了。而且你不用一次性就完全迁移你的应用:你可以同时使用 boto3 和 boto(2) ;比如仅在你应用中新的部分使用 boto3。


这个新的实现在不同的服务间会一致的多,而且因为其使用了数据驱动的方法来在运行时间(runtime)从 JSON 描述文件中生成类,所以其总是可以实现快速更新。再也不用滞后于新的 Amazon API 功能了,赶紧使用 bot3 吧!


5.TensorFlow


链接:tensorflow.org/


大名鼎鼎的 TensorFlow。自从谷歌在 2015 年 11 月发布以来,这个库已经获得了很多改进,它已成为时下最流行的 GitHub Python 库。简而言之,TensorFlow 是一个使用数据流图(data flow graphs)的数值计算库,可以在 GPU 或 CPU 上运行。


在过去一年里,我们目睹了 TensorFlow 在机器学习社区中掀起了一股新风潮(特别是在深度学习领域),它不仅出现在研究领域,而且在应用领域也非常常见。如果你正在做深度学习并想在高级别接口中使用它,你可以尝试以它为后端的 Keras 或新推出的 TensorFlow-Slim。


6.gym+universe


Gym:OpenAI Gym: A toolkit for developing and comparing reinforcement learning algorithms

Universe:Universe


如果你是人工智能圈内的人,肯定听说过非营利人工智能研究公司 OpenAI。他们的研究人员在今年开源了一些 Python 代码。Gym 是一个用于开发并比较强化学习算法的工具包。它包含一个开源库,这个库收集了一些可被用于测试强化学习算法的测试问题(环境)。它还包含一个站点与 API,能让你对比训练出的算法(代理,agent)的表现。因为它不在乎代理的实现方式,你可以选择使用自己的计算库建立代理:numpy、TensorFlow、Theano 等。


他们最近也发布了 Universe,这是一个用于研究通用人工智能在跨游戏、网页和其他应用上的表现的软件平台。Universe 能完美匹配 gym,因此它能让任何真实世界应用调整进 gym 环境中。研究人员希望这一无限的可能性能够加速对智能代理的研究,从而解决通用任务。


7.Bokeh


链接:Welcome to Bokeh


你可能熟知一些提供数据可视化的 Python 库,其中最流行的就是 matplotlib 和 seaborn。然而,Bokeh 被创造用来做交互可视化(interactive visualization),并且面向现代的网页浏览展示。这意味着 Bokeh 能创造出一个可以让你探索来自网页浏览器数据的情节(plot)。比较棒的是它紧密融合了 Juptyer Notebooks,所以你能使用它配合你的专业工具进行研究。它也有一个可选的服务器组件 bokeh-server,其带有许多强大的功能,比如在服务器端对大型数据集进行下采样、流传输数据、变换等。可点击网址 Gallery - Bokeh 0.12.3 documentation 查看案例,看起来很棒。


8.Blaze


链接:Ecosystem - Blaze 0.10.2rc1+5.g87dd886 documentation


有时候,当你对数据集运行分析时,却发现数据集过大,无法一次塞进计算机 RAM 中。如果你无法依赖 numpy 或 Pandas,你通常需要转而使用其他的工具,如 PostgreSQL、MongoDB、Hadoop、Spark 等等。这些工具都有其自身的优缺点,依照任务的特点,总有一种工具是适合你的。但决定转换工具是一项巨大的工程,因为你需要了解这些系统如何工作,以及如何以正确的形式插入数据。


Blaze 提供了一个统一的接口,让用户无需学习所有数据库技术。Blaze 库的核心是一种计算表达方式。Blaze 本身不会进行任何计算:它只是知道如何指定一个特定的后端,决定谁来执行任务。Blaze 还有其它很多功能(它形成了一个生态系统),它作为一个库被开发出来。例如,Dask 实现了一个可用于 NumPy 数组的插件,可以处理大于内存的内容和利用多核处理器,并且还具有动态任务调度能力。


9.Arrow


链接:crsmithdev/arrow


有一个流行的说法,在计算机科学领域只有两个大问题:无效缓存和命名。我认为这句话忽略了另一个大问题:管理数据时间(managing datetimes)。如果你曾经试图在 Python 中管理数据时间,你就会知道标准库里有巨量的模块和类型:datetime、date、 calendar、 tzinfo、 timedelta、 relativedelta、 pytz 等等。更糟糕的是,时区都自然设定为默认值。


Arrow 为开发者提供了「人类的时间(datetime for humans)」,提供了一种清晰的方法来创建、操作、格式化和转换日期、时间和时间戳。它可以用于替换 Python 2 和 3 的 datetime 类型,并提供了一个更友好的界面,同时加入新的功能(如 humanize)弥补了原系统的不足。即使你不需要 Arrow 提供的额外功能,使用它也可以大大减少代码中的引用。


10. Hug


链接:Embrace the APIs of the future


公开你的内部 API,这样可以大大简化 Python API 的开发过程。Hug 是一个仅限于 Python3 的库,提供在 Python 中创建 HTTP REST API 的最简单的方式。它不是一个 web 框架(虽然 Hug 提供这样的功能,而且表现很好),它的主要功能是公开正确的标准内部 Python API。这个想法非常简单:一次定义逻辑和结构,并且可以通过多种方式公开你的 API。目前,它支持公开 REST API 或命令行界面。


你可以使用类型注释(type annotations),让 Hug 不仅为你的 API 生成文件,同时提供验证和明确的错误消息,这可以让你的开发工作(和你的 API 用户的工作)变得轻松很多。Hug 构建在 Falcon 的高性能 HTTP 库之上,这意味着你可以使用任何 wsgi 兼容的服务器(例如 gunicorn)将其部署到生产环境中。


参考文章:Top 10 Python libraries of 2016 - Tryolabs Blog