转自:https://www.jianshu.com/p/d74659727d26
Github上面有很多有趣的python项目,包括软件、库、教程、资源等。这次收集了其中比较受欢迎的100个,供大家参考。
关注公众号:pydatas,后台回复:项目,获得全部项目链接
1、Minos:一个基于 Tornado/MongoDB/Redis 的社区系统
2、awesome-python-webapp:廖老师的 Python 入门教程中的实践项目的代码
3、tushare:TuShare 是一个免费、开源的 Python 财经数据接口包,TuShare 文档
4、beijing_bus:北京实时公交,可以显示查询的公交到达某站还需多久
5、luokr.com:Python Tornado 写的开源网站——螺壳网,访问,如图:
6、ssbc:Python Django 写的种子搜索网站——手撕包菜,如图:
7、listen1:Listen 1 让你用一个网页就能听到多个网站的在线音乐,支持各种平台。如图:
8、python-gems:有趣的 Pyhton 代码片段集合
9、algorithm:老齐的 Python 算法教程
10、python-goose:Goose 用于文章提取器,提取中文内容的示例代码:
>>> from goose import Goose
>>> from goose.text import StopWordsChinese
>>> url = 'http://www.bbc.co.uk/zhongwen/simp/chinese_news/2012/12/121210_hongkong_politics.shtml'
>>> g = Goose({'stopwords_class': StopWordsChinese})
>>> article = g.extract(url=url)
>>> print article.cleaned_text[:150]
香港行政长官梁振英在各方压力下就其大宅的违章建筑(僭建)问题到立法会接受质询,并向香港民众道歉。
梁振英在星期二(12月10日)的答问大会开始之际在其演说中道歉,但强调他在违章建筑问题上没有隐瞒的意图和动机。
一些亲北京阵营议员欢迎梁振英道歉,且认为应能获得香港民众接受,但这些议员也质问梁振英有
11、mincss:Python 写的用来找到 CSS 中没有用到的代码片段,并删除。适用于:想要做一个页面,但是不会写 CSS 人。示例代码如下:
#coding:utf-8
#!/usr/bin/env python
from __future__ import print_function
import sys, os
sys.path.insert(0, os.path.abspath('.'))
from mincss.processor import Processor
# 这里改成想要参考的页面
URL = 'http://localhost:9000/page.html'
def run():
p = Processor()
p.process(URL)
# 输出INlink的css的简化前和简化后的css代码
print("INLINES ".ljust(79, '-'))
for each in p.inlines:
print("On line %s" % each.line)
print('- ' * 40)
print("BEFORE")
print(each.before)
print('- ' * 40)
print("AFTER:")
print(each.after)
# 输出link引用的css的简化前和简化后的css代码
print("LINKS ".ljust(79, '-'))
for each in p.links:
print("On href %s" % each.href)
print('- ' * 40)
print("BEFORE")
print(each.before)
print('- ' * 40)
print("AFTER:")
print(each.after)
if __name__ == '__main__':
run()
12、KindleEar:这是一个运行在 Google App Engine(GAE) 上的 Kindle 个人推送服务应用,生成排版精美的杂志模式mobi/epub
格式自动每天推送至您的 Kindle 或其他邮箱。
13、python-guide:Requests 库的作者——kennethreitz,写的 Python 入门教程。不单单是语法层面的,涵盖项目结构、代码风格,进阶、工具等方方面面。虽然是英文版(中文翻译版),但我这个英语渣都能看懂,你肯定也可以,快去看看吧,开卷有益。在线阅读
14、flask-admin:我工作中需要写一个微型的管理系统,用的就是这个框架。简直快餐型,页面都写好了,只要设置好相关配置就可以跑起来了。唯一缺点就是文档中的例子少,开发一些特定的需求需要自己看源码,才能知道如何改。文档,下面是我跑起来之后的样子:
15、python-sdk:七牛云存储 SDK。我自己在用他家的服务,上手简单、有免费额度,可以用来做‘图床’,同时,有了这个 SDK 可以写一些好用的小工具。注意:图床不能随便用,我曾经就用超了,账户的钱能扣成负数!
16、superset:企业级的数据探索、展示平台。功能很强大,可以用来做数据分析、展示。如下图:
17、flaskbb:基于 Flask 框架做的论坛,功能有限,轻量级的论坛应用在线文档,可以在这个项目上进行二次开发,实现更加复杂的功能。在线预览
18、fuck-login:模拟登录一些知名的网站,为了方便爬取需要登录的网站。注意:控制爬虫的爬取频率!
19、Young:基于 Tornado 框架、MongoDB 数据库,写的功能丰富的社区项目。详细的安装步骤,适合学习如何创建社区类 Web App。在线预览,项目运行效果图:
20、textfilter:基于某 1w 词敏感词库,用 Python 实现几种不同的过滤方式。用于过滤敏感词的实用模块,示例代码:
from filter import DFAFilter
gfw = DFAFilter()
gfw.parse("keywords")
print "待过滤:售假人民币 我操操操"
print "过滤后:", gfw.filter("售假人民币 我操操操", "*")
test_first_character()
# 运行结果
# 待过滤:售假人民币 我操操操
# 过滤后: 售假**币 ****
21、qrcode:Python 写的生成动态、彩色、各式各样的二维码,详细的中文文档,通过 qrcode
生成的二维码样式如下:
22、httpie:非常好用的命令行 HTTP 客户端,cURL 的替代者,返回的结果支持高亮,提高了可读性。用于调试接口、查看服务器返回的 HTTP 协议的信息。在线文档,下面的是 cURL 和 httpie 的返回结果对比图:
23、langid:用于识别输入文本数据所属的语种,目前支持 97 种语言识别。示例代码:
import langid
text1 = "I am a coder and love data mining"
text2 = "请注明作者和出处并保留声明和联系方式"
print langid.classify(text1)
print langid.classify(text2)
# ('en', 0.9999957874458753)
# ('zh', 1.0)
24、fake-useragent:伪装浏览器身份,常用于爬虫。这个项目的代码很少,可以阅读一下,看看 ua.random
是如何返回随机的浏览器身份的 ,示例代码:
from fake_useragent import UserAgent
ua = UserAgent()
ua.ie
# Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US);
ua.msie
# Mozilla/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident/6.0)'
ua['Internet Explorer']
# Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)
ua.opera
# Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11
ua.chrome
# Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2'
ua.google
# Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13
ua['google chrome']
# Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11
ua.firefox
# Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1
ua.ff
# Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1
ua.safari
# Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25
# and the best one, random via real world browser usage statistic
ua.random
25、reddit:reddit.com 网站的源码,通过这个项目,可以学习 Python 在构建大型项目中的使用、项目结构、代码风格、Python 技巧的使用方法等。安装教程
26、httpstat:httpstat 美化了 curl
的结果,使得结果更加可读。同时它无依赖、兼容 Python3、一共才 300 多行。还可以显示 HTTP 请求的每个过程中消耗的时间,如下图:
27、PyMySQL:纯 Pyton 写的 MySQL 库,纯 Python 的好处就是可以运行在任何装有 Python 解释器(CPython、PyPy、IronPython)的平台上。相对于 MySQLdb 性能几乎一样,使用方法也一样,但是 PyMySQL 安装方法极其简单——pip install PyMySQL
,PyMySQL 使用示例代码:
# 下面为例子需要的数据库的建表语句
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(255) COLLATE utf8_bin NOT NULL,
`password` varchar(255) COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
AUTO_INCREMENT=1 ;
# -*- coding: utf-8 -*-
import pymysql.cursors
# 连接数据库
connection = pymysql.connect(host='localhost',
user='user',
password='passwd',
db='db',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
try:
with connection.cursor() as cursor:
# 创建一个新的纪录(record)
sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
cursor.execute(sql, ('[email protected]', 'very-secret'))
# 连接不会自动提交,所以你想下面要调用 commit 方法,存储对数据库的改动
connection.commit()
with connection.cursor() as cursor:
sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
cursor.execute(sql, ('[email protected]',))
# 获取一条的纪录(record)
result = cursor.fetchone()
print(result) # 结果输出:{'password': 'very-secret', 'id': 1}
finally:
connection.close() # 操作完数据库一要记得调用 close 方法,关闭连接
28、flask-limiter:一个 Flask 的扩展库,它可以根据访问者的 IP 限制其访问频率、次数等。示例代码如下:
from flask import Flask
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
app = Flask(__name__)
limiter = Limiter(
app,
key_func=get_remote_address,
global_limits=["2 per minute", "1 per second"],
)
@app.route("/slow")
@limiter.limit("1 per day")
def slow():
return "24"
@app.route("/fast")
def fast():
return "42"
@app.route("/ping")
@limiter.exempt
def ping():
return 'PONG'
app.run()
29、ngrok:一个十分方便、好用的内网穿透工具,它可以把本地某个端口的服务,通过一个安全隧道,映射到公网的一个地址。同时它提供了一个 Web 页面,展示了每个请求、响应的所有信息,便于调试本地的程序。基本的使用方法如下:
ngrok 协议 本地服务监听的端口
ngrok http 8000
创建成功会返回公网地址,然后通过该地址就可以访问到本地的服务。
本地访问 http://localhost:4040,就可以查看关于每个请求、响应的相关数据
30、glances:一个可以让你一目了然你的系统情况(类 (h)top)的工具,它界面友好,安装方便:pip install glances
31、saythanks.io:Kennethreitz 写的一个简单的网站(基于 Flask),用于向开源项目作者发送感谢邮件的 Web App。该项目结构简单,可以用来学习大神是如何快速开发 Web 项目、方法、代码风格、开发常用库。而且该项目的意义也特别好:感谢开源项目的作者,愿开源社区越来越好,网站地址
32、locust:模拟用户行为的负载测试工具,包含友好的 Web 页面,如下图:
33、jumpserver:Jumpserver 是一款由 Python 编写开源的跳板机(是一类可作为跳板批量操作远程设备的网络设备)系统,实现了跳板机应有的功能。基于 SSH 协议来管理,客户端无需安装 agent。支持常见 Linux 系统,效果如下:
34、sh:sh 是一个成熟,用于替代 subprocess,它允许你调用任何程序,就像它是一个函数,支持 Python2.6 - 3.5
from sh import ifconfig
print ifconfig("eth0")
35、fastText.py:fastText 简而言之,就是把文档中所有词通过 lookup table 变成向量,取平均后直接用线性分类器得到分类结果。fastText 的实现
36、mongoaudit:强大的 MongoDB 渗透测试工具,用于发掘 MongoDB 漏洞、并提出改善方法。
- 安装:
pip install mongoaudit
- 运行:
python mongoaudit
37、mycli:mycli 是一个带语法高亮、自动补全的 MySQL 命令行客户端工具。例如,连接数据库方法:mycli -h localhost -u 用户名 数据库
38、python-fire:Fire 是 Google 开源的 Python 库,可自动将您的代码转变成 CLI,无需您做任何额外工作。您不必定义参数,设置帮助信息,或者编写定义代码运行方式的 main 函数。相反,您只需从 main 模块调用“Fire”函数,其余工作全部交由 Python Fire 来完成。示例代码如下:
import fire
class Example(object):
def hello(self, name='world'):
"""Says hello to the specified name."""
return 'Hello {name}!'.format(name=name)
def main():
fire.Fire(Example)
if __name__ == '__main__':
main()
# 在终端中调用效果如下:
$ ./example.py hello
Hello world!
$ ./example.py hello David
Hello David!
$ ./example.py hello --name=Google
Hello Google!
39、ngxtop:解析 nginx 访问日志并格式化输出有用的信息,可以用来实时了解你的服务器正在发生的情况。安装命令 pip install ngxtop
,输出示例如下:
$ ngxtop
running for 411 seconds, 64332 records processed: 156.60 req/sec
Summary:
| count | avg_bytes_sent | 2xx | 3xx | 4xx | 5xx |
|---------+------------------+-------+-------+-------+-------|
| 64332 | 2775.251 | 61262 | 2994 | 71 | 5 |
Detailed:
| request_path | count | avg_bytes_sent | 2xx | 3xx | 4xx | 5xx |
|------------------------------------------+---------+------------------+-------+-------+-------+-------|
| /abc/xyz/xxxx | 20946 | 434.693 | 20935 | 0 | 11 | 0 |
| /xxxxx.json | 5633 | 1483.723 | 5633 | 0 | 0 | 0 |
| /xxxxx/xxx/xxxxxxx | 3624 | 7830.236 | 3621 | 0 | 3 | 0 |
| /static/js/minified/utils.min.js | 3031 | 1781.155 | 2104 | 927 | 0 | 0 |
40、algorithms:基本算法、数据结构的 Python 实现
.
├── array
│ ├── circular_counter.py
│ └── ...
├── backtrack
│ ├── anagram.py
│ └── ...
├── bfs
│ ├── shortest_distance_from_all_buildings.py
│ └── word_ladder.py
├── bit
│ ├── count_ones.py
│ └── ...
│ └── traversal.py
└── 等等
41、searx:分分钟打造一个聚合的搜索引擎,使用简单,部署方便。拓展方便,基于插件式的管理。演示地址
42、grequests:Rquests + Gevent 让异步 HTTP 变得简单、人性化。示例代码:
>>> import grequests
>>> def exception_handler(request, exception):
... print "Request failed"
>>> reqs = [
... grequests.get('http://httpbin.org/delay/1', timeout=0.001),
... grequests.get('http://fakedomain/'),
... grequests.get('http://httpbin.org/status/500')]
>>> grequests.map(reqs, exception_handler=exception_handler)
Request failed
Request failed
[None, None, ]
43、explainshell:一个可以解析 Linux 命令的网站,它可以给出命令的解释和其参数的解释,例如:ps -aux|grep python
,在线演示
44、certbot:免费的自动启用和部署 HTTPS 的工具,让你的网站开启 HTTPS 变得简单快捷。在部署教程页面选择服务器的操作系统和 Web 服务器,之后根据给出的步骤一步步的执行命令就行了,部署教程
45、musicbox:基于 Python 编写的网易云音乐命令行版本,使用起来简单优雅,能够快速安装及使用
46、django-blog-tutorial:基于最新版 Django 1.10 和 Python 3.5,通过 26 篇教程一步步带你使用 Django 从零开发一个个人博客系统,在实践的同时掌握 Django 的开发技巧,完成效果展示
47、aredis:一款基于 Python3 asyncio 的异步 redis 客户端,支持对于单实例,连接池, 哨兵以及集群。作者希望可以找到志同道合的小伙伴集思广益,一起维护、优化。示例代码如下:
>>> import asyncio
>>> from aredis import StrictRedis
>>>
>>> async def example():
>>> client = StrictRedis(host='127.0.0.1', port=6379, db=0)
>>> await client.flushdb()
>>> await client.set('foo', 1)
>>> assert await client.exists('foo') is True
>>> await client.incr('foo', 100)
>>>
>>> assert int(await client.get('foo')) == 101
>>> await client.expire('foo', 1)
>>> await asyncio.sleep(0.1)
>>> await client.ttl('foo')
>>> await asyncio.sleep(1)
>>> assert not await client.exists('foo')
>>>
>>> loop = asyncio.get_event_loop()
>>> loop.run_until_complete(example())
48、freezegun:时间漫步模块,模拟到某一个时间,使用简单方式多样,实现了装饰器、上下文等调用方式。示例代码如下:
from freezegun import freeze_time
import datetime
import unittest
@freeze_time("2012-01-14")
def test():
assert datetime.datetime.now() == datetime.datetime(2012, 1, 14)
49、LearnPython:这一个以”撸代码“的形式学习 Python 的编程技巧的项目,针对 Python 的一些语法特性力求通过代码例子解释该知识点、同时还有一些实践项目,通过动手实践有助于知识的融会贯通。同时可以关注作者的知乎专栏学习更多的 Python 编程技巧
50、getproxy:极简的抓取代理项目,无需配置。不仅提供了获取代理脚本,同时可以通过该页面,直接获取可用代理(15min 更新、类型包含http和https)
51、syncPlaylist:在网易云音乐与 QQ 音乐之间同步歌单。易于使用、配置方便、代码简单,用到的技术:requests
+ beautifulsoup
以及 selenium
+ phantomjs
52、GetSubtitles:通过拖曳视频文件进终端,一步下载字幕 到视频对应文件夹,并重命名字幕名称为视频名称。Ubuntu 16.04、Windows 10上测试通过,同时兼容 Python2、3。Python 的魅力之一就是可以快速实现一个适合自己的小工具 Cool ✌️
53、huey:结合 redis 实现的轻量任务队列,但是支持功能还是很多的:
- 多进程、多线程、协程
- 任务定时执行
- 任务执行失败重试
- 结果存储
54、simiki:一个简单的个人 Wiki 框架,便于快速搭建 Wiki 页。使用 Markdown 书写 Wiki, 生成静态 HTML 页面。Wiki 源文件按目录分类存放, 方便管理维护。中文文档
55、pyecharts:Echarts+Python 实现的一个用于生成 Echarts 图表的类库
56、proxy_pool:基于 Python 的自建代理 IP 池服务,通过网络爬虫抓取互联网上免费的代理 IP,本地校验、剔除失效的代理IP,从而实现高可用的代理 IP 池。最后使用 Flask 搭建提供代理 IP 服务,包括代理池刷新、无效代理删除、代理获取等。该项目设计文档详细、模块结构简明易懂,同时适合爬虫新手更好的学习爬虫技术
57、WeiboSpider:分布式微博爬虫,支持快速抓取和稳定抓取两种运行模式。项目模块逻辑清晰、注释丰富、便于定制化自己的需求。同时,对于小白用户,可以通过演示视频快速入门,也提供QQ群答疑,已经持续维护一年多。靠谱的项目,小伙伴们要赶快上车~
58、pygorithm:一个帮助学习主要算法的库,可以通过理解这些算法的实现,提高自己的算法水平。冒泡排序示例:
>>> from pygorithm.sorting import bubble_sort
>>> my_list = [12, 4, 3, 5, 13, 1, 17, 19, 15]
>>> sorted_list = bubble_sort.sort(my_list)
>>> print(sorted_list)
>>> [1, 3, 4, 5, 12, 13, 15, 17, 19]
59、newspaper:强大的提取 Web 的内容、文章的库,支持多种语言,安装命令 pip3 install newspaper3k
。示例代码:
>>> from newspaper import Article
>>> url = 'http://fox13now.com/2013/12/30/new-year-new-laws-obamacare-pot-guns-and-drones/'
>>> article = Article(url)
>>> article.download()
>>> article.html
'