绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Github上好玩的50个python项目汇总 (二)
2020-06-19 09:55:13
资源来自Github 521xueweihanHelloGithub

更多关注

濡须一扁舟:Github上好玩的50个python项目汇总 (一)zhuanlan.zhihu.com图标

1、syncPlaylist在网易云音乐与 QQ 音乐之间同步歌单。易于使用、配置方便、代码简单,用到的技术:requests + beautifulsoup 以及 selenium + phantomjs

2、GetSubtitles通过拖曳视频文件进终端,一步下载字幕 到视频对应文件夹,并重命名字幕名称为视频名称。Ubuntu 16.04、Windows 10上测试通过,同时兼容 Python2、3。Python 的魅力之一就是可以快速实现一个适合自己的小工具 Cool ✌️


3、huey结合 redis 实现的轻量任务队列,但是支持功能还是很多的:

  • 多进程、多线程、协程
  • 任务定时执行
  • 任务执行失败重试
  • 结果存储

4、simiki一个简单的个人 Wiki 框架,便于快速搭建 Wiki 页。使用 Markdown 书写 Wiki, 生成静态 HTML 页面。Wiki 源文件按目录分类存放, 方便管理维护。中文文档

5、pyechartsEcharts+Python 实现的一个用于生成 Echarts 图表的类库


6、proxy_pool基于 Python 的自建代理 IP 池服务,通过网络爬虫抓取互联网上免费的代理 IP,本地校验、剔除失效的代理IP,从而实现高可用的代理 IP 池。后使用 Flask 搭建提供代理 IP 服务,包括代理池刷新、代理删除、代理获取等。该项目设计文档详细、模块结构简明易懂,同时适合爬虫新手更好的学习爬虫技术



7、WeiboSpider分布式微博爬虫,支持快速抓取和稳定抓取两种运行模式。项目模块逻辑清晰、注释丰富、便于定制化自己的需求。同时,对于小白用户,可以通过演示视频快速入门,也提供QQ群答疑,已经持续维护一年多。靠谱的项目,小伙伴们要赶快上车~


8、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]

9、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
'<!DOCTYPE HTML><html itemscope itemtype="http://...'

>>> article.parse()

>>> article.authors
['Leigh Ann Caldwell', 'John Honway']

>>> article.publish_date
datetime.datetime(2013, 12, 30, 0, 0)

>>> article.text
'Washington (CNN) -- Not everyone subscribes to a New Year's resolution...'

>>> article.top_image
'http://someCDN.com/blah/blah/blah/file.png'

>>> article.movies
['http://youtube.com/path/to/link.com', ...]

>>> from newspaper import Article
>>> url = 'http://www.bbc.co.uk/zhongwen/simp/chinese_news/2012/12/121210_hongkong_politics.shtml'

>>> a = Article(url, language='zh') # Chinese

>>> a.download()
>>> a.parse()

>>> print(a.text[:150])
香港行政长官梁振英在各方压力下就其大宅的违章建
筑(僭建)问题到立法会接受质询,并向香港民众道歉。
梁振英在星期二(12月10日)的答问大会开始之际
在其演说中道歉,但强调他在违章建筑问题上没有隐瞒的
意图和动机。 一些亲北京阵营议员欢迎梁振英道歉,
且认为应能获得香港民众接受,但这些议员也质问梁振英有

>>> print(a.title)
港特首梁振英就住宅违建事件道歉

10、faker用于生成假数据的库,支持多种语言,你值得拥有。示例代码:

fake.address()
# '辽宁省雪市静安廉街b座 998259'

fake.street_address()
# '巢湖街U座'

fake.building_number()
# 'x座'

fake.city_suffix()
# '市'

fake.latitude()
# Decimal('-0.295126')

fake.province()
# '湖北省'

11、binlog2sql从 MySQL binlog 解析出你要的 SQL。根据不同选项,提供如下功能

  • 数据快速回滚,闪回原理与实践
  • 主从切换后新 master 丢数据的修复
  • 从 binlog 生成标准SQL,带来的衍生功能

12、pandas-tutorial这套 pandas 教程包含从初级到进阶的内容,适合初学者和希望进阶建立知识体系的数据科学从业者阅读。作者还在持续更新内容,你值得拥有

13、pysheeetPython 速查表,在线阅读

14、robobrowser提供多种模拟操作网页的库,比如获得网页内容、访问链接、点击按钮、填充并提交表单、上传文件。使用简单、API 友好。适用于想要通过脚本流程化操作,某些未提供这些操作接口的场景,示例代码如下:

# 上传文件
from robobrowser import RoboBrowser

# Browse to a page with an upload form
browser = RoboBrowser()
browser.open('http://cgi-lib.berkeley.edu/ex/fup.html')

# Find the form
upload_form = browser.get_form()
upload_form                     # <RoboForm upfile=, note=>

# Choose a file to upload
upload_form['upfile']           # <robobrowser.forms.fields.FileInput...>
upload_form['upfile'].value = open('path/to/file.txt', 'r')

# Submit
browser.submit(upload_form)

15、ItChat开源的微信个人号SDK,提供了丰富的功能。从而使得 Python 调用微信、发送消息、传输文件等操作只需要编写极少的代码,示例代码如下:

import itchat

itchat.auto_login()

itchat.send('Hello, filehelper', toUserName='filehelper')

16、recordsKenneth Reitz 大神的for Humans™系列,Records 是一个支持大多数主流关系数据库的原生 SQL 查询第三方库。API 友好,使用简单、支持命令行模式、功能多样。与此同时该库只有 500 行代码,可以当作入门阅读源码的项目,同时学习大神的编程技巧与习惯,示例代码如下:

import records

db = records.Database('postgres://...')  # 连接数据库
rows = db.query('select * from active_users')  # 执行原生 SQL
# 遍历结果
for r in rows:
    print(r.name, r.user_email)

# 友好的 print 格式
print(rows.dataset)
# username|active|name      |user_email       |timezone
# --------|------|----------|-----------------|--------------------------
# model-t |True  |Henry Ford|model-t@gmail.com|2016-02-06 22:28:23.894202

# 支持将结果导出成不同格式
print(rows.export('json'))  # json
print(rows.export('csv'))  # csv
print(rows.export('yaml')) # yaml
rows.export('df')  # pandas 的 df 对象
with open('report.xls', 'wb') as f:
    f.write(rows.export('xls'))  # xls

17、zdict方便的终端字典工具,支持多种字典和参数、翻译结果高亮、以及交互模式查询。安装命令 pip install zdict(仅支持 Python3)。查询效果如下图所示:



18、joblib使用 Python 方便的进行并行计算,示例代码如下:

from joblib import Parallel, delayed
from math import sqrt
Parallel(n_jobs=1)(delayed(sqrt)(i**2) for i in range(10))

19、tldr-python-clientLinux man 解释一般都太长了,很多时候我们就想用一些比较常用的命令,但却记不起来。这个时候如果不 Google,就可以用 tldr(简化 man 的工程)。该项目为 Python 客户端实现


20、thefuck在 Linux 命令行中,当你输入的命令有错误后,直接输入 fuck 就可以自动执行修复后的命令,效果图如下:


21、youtube-dl强大的视频下载工具,支持几百个国内外主流视频网站。正如名字一样,初是为了下载 youtube 上的视频而开发的。如果有国外服务器的朋友,可以充分利用这个工具,下载 youtube 上的视频,速度不要太爽。下面介绍安装、下载视频等命令:

# 1. 安装命令:sudo pip install youtube-dl
Installing collected packages: youtube-dl
Successfully installed youtube-dl-2017.12.14

# 2. 查看 URL 支持格式:youtube-dl --list-formats URL
format code  extension  resolution note
134          mp4        450x360    DASH video  449k , avc1.4d4015, 25fps, video only
17           3gp        176x144    small , mp4v.20.3, mp4a.40.2@ 24k
36           3gp        300x240    small , mp4v.20.3, mp4a.40.2
18           mp4        450x360    medium , avc1.42001E, mp4a.40.2@ 96k
43           webm       640x360    medium , vp8.0, vorbis@128k (best)

# 3. 选择格式下载视频:youtube-dl -f 18 URL (18为mp4 450x360格式)
[youtube:playlist] Downloading playlist PLF90USSyuoYzPhhFG7XFBRn63Zvs--lNP - add --no-playlist to just download video JyLducMVYVg
[youtube:playlist] PLF90USSyuoYzPhhFG7XFBRn63Zvs--lNP: Downloading webpage
[download] Downloading playlist: 情满四合院完整版
[youtube:playlist] playlist 情满四合院完整版: Downloading 42 videos
[download] Downloading video 1 of 42
...

# 4. 下载完成后,后使用 https://github.com/houtianze/bypy 库把下载的视频同步到百度网盘上

22、jieba强大的 Python 分词库,拿来直接用就好。示例代码如下:

# encoding=utf-8
import jieba

seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list))  # 全模式

seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))  # 模式

seg_list = jieba.cut("他来到了网易杭研大厦")  # 默认是模式
print(", ".join(seg_list))

seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
print(", ".join(seg_list))

【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学

【模式】: 我/ 来到/ 北京/ 清华大学

【新词识别】:他, 来到, 了, 网易, 杭研, 大厦    (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)

【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造

23、pydu该库将平时常用的数据结构和工具都收录其中,可供日常开发的使用,同时方便学习与借鉴,丰富的文档能帮助新手更好的理解和使用它。这些实用的模块都是来自于开源项目和贡献者们的智慧,快来加入到这个项目中,让它变得更加实用和丰富

24、shell-functools把函数式的编程带入 shell,从而让很多事情变得简单。通过 Python 的高阶函数和内置模块 os.path 与命令的管道结合,达到了强大、高效的功效。相比于单纯的命令实现更加的直观和容易理解,示例代码如下:

示例 1
# ls 查看当前目录下的文件
> ls 
document.txt
folder
image.jpg

# 通过 map abspath 展示这些文件的路径
> ls | map abspath
/tmp/demo/document.txt
/tmp/demo/folder
/tmp/demo/image.jpg

示例 2
# find 命令找到的文件和目录
> find
.
./folder
./folder/me.jpg
./folder/subdirectory
./folder/subdirectory/song.mp3
./document.txt
./image.jpg

# 把找到的结果中的文件,重命名在末尾追加 .bak (备份文件)
> find | filter is_file | map basename | map append ".bak"
me.jpg.bak
song.mp3.bak
document.txt.bak
image.jpg.bak

25、tqdm强大、快速、易扩展的 Python 进度条库。我想通过下面的示例代码和效果展示图,你会跑去给这个项目来个 Star 的

from tqdm import tqdm
for i in tqdm(range(10000)):
    pass
# 输出结果:
# 76%|████████████████████████████         | 7568/10000 [00:33<00:10, 229.00it/s]


26、HAipproxy使用 Scrapy+Redis 实现的高可用分布式 IP 代理池,为大型分布式爬虫提供高可用低延迟的代理 IP 资源。

from client.py_cli import ProxyFetcher
args = dict(host='127.0.0.1', port=6379, password='123456', db=0)
# 这里`zhihu`的意思是,去和`zhihu`相关的代理ip校验队列中获取ip
# 这么做的原因是同一个代理IP对不同网站代理效果不同
fetcher = ProxyFetcher('zhihu', strategy='greedy', redis_args=args)
# 获取一个可用代理
print(fetcher.get_proxy())
# 获取可用代理列表
print(fetcher.get_proxies()) # or print(fetcher.pool)

以知乎为目标抓取网站,该代理IP池的实际性能测试结果如下:



27、MovieHeavens基于 Pyqt4 的电影天堂电影搜索工具,再也不用忍受各种广告和点击跳转了



28、WechatSogou基于搜狗微信搜索的微信公众号爬虫库,极易上手。示例代码:

import wechatsogou

ws_api = wechatsogou.WechatSogouAPI()
ws_api.get_gzh_info('微信名称')

29、Synonyms中文近义词工具包。支持自然语言理解的很多任务:文本对齐、推荐算法、相似度计算、语义偏移、关键字提取、概念提取、自动摘要、搜索引擎等。示例代码如下:

import synonyms
synonyms.seg("能量")


30、pook模拟 HTTP 请求结果的库,可用于单元测试等场景。采用装饰器方式调用的示例代码如下:

import pook
import requests

@pook.get('http://httpbin.org/status/500', reply=204)
@pook.get('http://httpbin.org/status/400', reply=200)
def fetch(url):
    return requests.get(url)

res = fetch('http://httpbin.org/status/400')
print('#1 status:', res.status_code)

res = fetch('http://httpbin.org/status/500')
print('#2 status:', res.status_code)

31、incubator-airflow定时任务管理平台,管理和调度各种离线定时任务,自带 Web 管理界面。当定时任务量达到百级别的时候,就无法再使用 crontab 有效、方便地管理这些任务了。该项目就是为了解决了这个问题而诞生的



32、wtfpython有趣、令人惊讶(坑爹)、鲜为人知的 Python 代码片段集合。中文


33、redis-fainaRedis 性能分析器。提供两种模式分析模式:命令实时、读取日志。其原理是使用 Redis MONITOR 命令,将该命令的结果通过管道传递给 redis-faina 脚本,脚本将返回的信息解析,并汇成总成统计信息。具体信息如下所示:

注意:分析非常闲的 redis 实例时,分析的结果可能偏差的很多。
时间单位为微秒:ms = 1.0 × 10^-6 seconds

Overall Stats
========================================
# 总命令数
Lines Processed  	10
# QPS
Commands/Sec     	1.03       

# 出现多的 key 的前缀
Top Prefixes                           
========================================
startchart  	9	(90.00%)

# 请求多的key
Top Keys                                
========================================
startchart:521xueweihan/hellogithub  	9	(90.00%)

# 请求多的命令
Top Commands                        
========================================
get  	9	(90.00%)

# 请求响应时间的分布
Command Time (microsecs)       
========================================
Median  	583914.0
75%     	637395.0
90%     	5703923.0
99%     	5703923.0

# 总耗时多的命令
Heaviest Commands (microsecs)
========================================
get  	9746157.0

# 慢请求列表
Slowest Calls                             
========================================
5703923.0  	"get" "startchart:521xueweihan/hellogithub"
637395.0   	"get" "startchart:521xueweihan/hellogithub"
633909.0   	"get" "startchart:521xueweihan/hellogithub"
583914.0   	"get" "startchart:521xueweihan/hellogithub"
569207.0   	"get" "startchart:521xueweihan/hellogithub"
548745.0   	"get" "startchart:521xueweihan/hellogithub"
545493.0   	"get" "startchart:521xueweihan/hellogithub"
523571.0   	"get" "startchart:521xueweihan/hellogithub"

34、marshmallow使用类似于 ORM 的语法,序列化、反序列化 Python 对象。可以将序列化的对象呈现为标准格式,适用于例如数据校验、返回 HTTP API 的 JSON。示例代码如下:

from datetime import date
from marshmallow import Schema, fields, pprint

class ArtistSchema(Schema):
    name = fields.Str()

class AlbumSchema(Schema):
    title = fields.Str()
    release_date = fields.Date()
    artist = fields.Nested(ArtistSchema())

bowie = dict(name='David Bowie')
album = dict(artist=bowie, title='Hunky Dory', release_date=date(1971, 12, 17))

schema = AlbumSchema()
result = schema.dump(album)
pprint(result, indent=2)
# 输出如下
# { 'artist': {'name': 'David Bowie'},
#   'release_date': '1971-12-17',
#   'title': 'Hunky Dory'}

35、tenacity使用该库可以优雅地实现各种需求的重试。示例代码如下:

from tenacity import retry, stop_after_attempt

# 通过装饰器,实现遇到异常重试3次
@retry(stop=stop_after_attempt(3)) 
def get_data(url):
    response = requests.get(url)
    response_json = response.json()

36、unimatrix模拟“黑客帝国”影片中的终端动画脚本



37、pudb基于控制台的全屏 Python 可视化调试器。比 pdb 好用太多了,特性:

  • 源码语法高亮,栈、断点、变量可见并且一直动态更新。变量展示还有很多可以定制化的功能。
  • 基于键盘,简单高效。支持 VI 的鼠标移动。还支持 PDB 的某些命令
  • 支持查找源代码,可以使用 m 代用 module browser 查看载入的模块
  • 断点设置。鼠标移到某行代码,按 b,然后可以在断点窗口编辑断点


38、Scylla一款高质量的免费代理 IP 池工具,仅支持 Python 3.6。中文文档,特性如下:

  • 自动化的代理 IP 爬取与验证
  • 易用的 JSON API
  • 简单但美观的 web 用户界面,基于 *cript 和 React(例如,代理的地理分布)
  • 少仅用一行代码即可与 Scrapy 和 requests 进行集成
  • 等等


39、hue开源的 Apache Hadoop UI 系统。通过使用 Hue 我们可以在浏览器端的 Web 控制台上与 Hadoop 集群进行交互来分析处理数据。核心功能:

  • 数据可视化
  • SQL 编辑器,支持 Hive、Impala、MySQL等
  • 可进行 workflow 的编辑、查看



40、FeelUOwn一个符合 Unix 哲学的跨平台的音乐播放器,主要面向 Linux/macOS 用户。特性:

  • 安装简单,新手友好
  • 默认提供国内各音乐平台插件(网易云、虾米、QQ)
  • 较强的可扩展性可以满足大家折腾的欲望
  • 核心模块有较好文档和测试覆盖



41、tinydbTinyDB 是使用纯 Python 编写的 NoSQL 数据库,使用 json 文件存储数据。它区别于 SQLite 的关系性数据库。同样的小、不需要依赖外部服务器。适用于桌面程序、客户端,不适用于 Web 应用、高性能的数据查询。友好的 API,示例代码:

>>> from tinydb import TinyDB, Query
>>> db = TinyDB('path/to/db.json')
>>> User = Query()
>>> db.insert({'name': 'John', 'age': 22})
>>> db.search(User.name == 'John')
[{'name': 'John', 'age': 22}]



42、TGmeetup搜集、整理、展示、报名技术类线下聚会的命令行工具,让使用者可以更加方便、及时的获取技术类活动资讯

43、termtosvgPython 写的终端记录器。通过命令 termtosvg 运行该工具,然后在终端执行你要展示的命令,终输入 exit 命令结束录制,本地会生成一份 SVG 动画,可用于分享、展示终端操作。效果如下:



44、cx-extractor-python这是一个对网页正文进行抽取的工具。 cx-extractor 算法的 python 版本,改进了原有算法,使其支持中英文,对新闻类网页正文抽取效果较好。示例代码:

from crawler.cx_extractor_Python import  cx_extractor_Python
cx = cx_extractor_Python()
test_html = cx.getHtml('http://news.163.com/16/0101/10/BC84MRHS00014AED.html')
content = cx.filter_tags(test_html)
s = cx.getText(content)
print(s)

45、awslogs一个简单的命令行工具,用于在本地查询 Amazon CloudWatch 日志,强大的支持多实例日志汇总查看。简单的查看命令:awslogs get /var/logs/syslog ALL -s1d



46、CUPCUP 基础库是百度开源的 Python 语言基础库,致力将 DEV 从涉及底层操作、Util 操作类解放出来,使其更关注构建 service 上层业务逻辑。 目前已涵盖了构建一个服务的各个方面,大家可以从基础库的代码结构、wiki、doc 中进行简单了解。

cup
    |-- cache.py                module              缓存相关模块 ( Memory cache related module )
    |-- decorators.py           module              python 修饰符,比如 @Singleton 单例模式 (Decorators of python)
    |-- err.py                  module              异常 exception 类, Exception classes for CUP
    |-- __init__.py             module              默认__init__.py, Default __init__.py
    |-- log.py                  module              打印日志类,CUP 的打印日志比较简洁、规范,设置统一、简单(cup logging module)
    |-- mail.py                 module              发送邮件 ( CUP Email module (send emails))
    |-- net                     package             网络相关操作( Network operations, such as net handler parameter tuning )
    |-- oper.py                 module              一些混杂操作(Mixin operations)
    |-- platforms.py            module              跨平台、平台相关操作函数(Cross-platform operations)
    |-- res                     package             资源获取、实时用量统计等,所有在 /prco 可获得的系统资源、进程、设备等信息 ( Resource usage queries (in /proc)、Prcoess query、etc )
    |-- shell                   package             命令 Shell 操作 pakcage ( Shell Operations、cross-hosts execution )
    |-- services                package             构建服务支持的类(比如心跳、线程池 based 执行器等等) Heartbeat、Threadpool based executors、file service、etc
    |-- thirdp                  package             第三方依赖纯 Py 模块( Third-party modules:pexpect、httplib2 )
    |-- timeplus.py             module              时间相关的模块(Time related module)
    |-- unittest.py             module              单元测试支持模块( Unittest、assert、noseClass )
    |-- util                    package             线程池、可打断线程、语义丰富的配置文件支持( ThreadPool、Interruptable-Thread、Rich configuration、etc )
    |-- version.py              module              内部版本文件,CUP Version

47、supervisorPython 开发的一个 C/S 服务,是 Linux/Unix 系统下的一个进程管理工具,不支持 Windows 系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用 Supervisor 管理的进程,当一个进程意外被杀死,supervisort 监听到进程死后,会自动将它重新启动,很方便的做到进程自动恢复的功能,提高系统、服务的稳定性,多用于生产环境

48、himawaripy一个 Python3 脚本,它会定时(需设置定时任务)抓取由日本 Himawari 8 气象卫星拍摄的接近实时的地球照片,并将它设置成你的桌面背景


49、loguru一个让 Python 记录日志变得简单的库



50、weixin_crawler基于 Scrapy、Flask、Echarts、Elasticsearch 等实现的微信公众号文章爬虫。自带 UI 界面、分析报告、搜索功能


END!

分享好友

分享这个小栈给你的朋友们,一起进步吧。

人生苦短,不如学Python
创建时间:2020-06-18 16:48:21
Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • liuxuhui
    专家
戳我,来吐槽~