一、5 个值得在 2018 年关注的库
Web 领域:Sanic
这个库和 Flask 类似,但是比它快很多,速度能在测试中达到每秒 36000 次请求。在2017年的 Star 增长数几乎是翻了一倍。Gotta go faster!
环境与包管理:Pipenv
这个库相当于是环境管理和包管理二合一,由 Kenneth Reitz (Requests 的作者 )编写,现在移交给 Python 官方来维护,提供比 pip 体验更好的开发包管理。它的 Slogon 是Python Development Workflow for Humans,用来解决各种环境不一致、安装包的问题。
爬虫:Requestium
现在反爬虫技术越来越厉害,常见的请求 + 解析爬虫随着频率变大和前端开发的复杂化变得并不是那么奏效。Requestium 的好处是,结合了 Chrome 59 以后的 headless 无头特性(代替了 phantomjs)。虽然效率稍微低一点,但是稳,前端渲染的网页也可以爬取解析。是 Requests, Selenium 和 Parsel 的结合体。
深度学习:Caffe2
文本处理:FlashText
这个库的开发者在 medium 上发了一篇文章,标题是:Regex was taking 5 days to run. So I built a tool that did it in 15 minutes. (正则要花5天时间才能完成,所以我做了个工具在15分钟内搞定)。这个库可以快速进行大规模语料库的文本搜索与替换。当关键词数量>500 的时候,FlashText 的搜索速度开始超过正则。
作者:麻瓜编程
链接:https://www.zhihu.com/question/24590883/answer/286407918
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
二、Awesome Python中文版来啦!
引自:Python 资源大全
(本文由 伯乐在线 - 艾凌风 翻译
英文出处:vinta/awesome-python)
三、python 之网络和邮件
1. yagmail
果使用 yagmail
,发送一个带附件的邮件,只需要2行代码:
import yagmail yag = yagmail.SMTP(user='joy_lmx@163.com', password='nicai?', host='smtp.163.com', port='25') yag.send(user, subject = "I now can send an attachment", attachments=['a.txt', 'b.jpg'])
2. requests
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass')) >>> r.status_code 200 >>> r.headers['content-type'] 'application/json; charset=utf8' >>> r.encoding 'utf-8' >>> r.text u'{"type":"User"...' >>> r.json() {u'private_gists': 419, u'total_private_repos': 77, ...}
3. psutil
psutil
是用来获取操作系统监控以及进程管理的,如果你正在写一个监控系统(或脚本),赶紧去试试。这么说吧,我曾经使用psutil把网易内部的一个监控模块,从 \(1000+\) 行重构到了\(100+\) 行。
我这里推荐的几个库,可能 yagmail
对最多人有用。而 psutil
,对专业的人士最有用。如果你要写一个监控系统,不使用 psutil
的话,只能直接去 /proc
目录下读取想用的文件进行计算,或者执行 iostat
、vmstat
、df
等 linux
命令获取命令输出,不管哪一种方法,都要处理很多繁琐的细节。有了 psutil
以后,就轻松多了。贴段代码大家感受一下:
def get_network_info(self):
""" psutil.net_io_counters()
snetio(bytes_sent=12541464,
bytes_recv=21459989,
packets_sent=80164,
packets_recv=88134,
errin=0, errout=0, dropin=0, dropout=0)
"""
return psutil.net_io_counters()
def get_memory_used(self):
""" psutil.virtual_memory()
svmem(total=4159041536, available=3723980800,
percent=10.5, used=1599082496, free=2559959040,
active=587403264, inactive=897105920,
buffers=95989760, cached=1068032000)
"""
memory_info = psutil.virtual_memory()
memory_used = ( memory_info.total * memory_info.percent / 100 ) / 1024 / 1024
return memory_used
此外,使用越来越广泛的监控工具 glances(如果没用过,要不现在就是试试?),就是用 psutil 收集相关数据的。
4. BeautifulSoup
如果你写爬虫,还在用 XPath
解析 HTML,那赶紧用用 BeautifulSoup
,比 XPath
好用一百倍;如果你还在用正则表达式从 HTML 中获取内容,BeautifulSoup
能让你好用到哭。(补充:评论里大家都说 XPath
更好用,难道是我思维方式和大家不一样?)BeautifulSoup
是用来解析 HTML 的,特点就是好用,有人吐槽 BeautifulSoup
慢?我不在乎 BeautifulSoup
比 XPath
慢多少,我只知道,我的时间比机器的更宝贵。
例如,要找到页面中所有的 links,如下所示:
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
from bs4 import BeautifulSoup
import requests
url = 'https://www.biaodianfu.com'
r = requests.get(url, timeout=20)
soup = BeautifulSoup(r.content, 'html.parser')
print(type(soup))
<class 'bs4.BeautifulSoup'>
for link in soup.find_all('a'):
print(link.get('href'))
https://www.biaodianfu.com/category/product-design
https://www.biaodianfu.com/category/share-discovery
https://www.biaodianfu.com/category/bigdata
https://www.biaodianfu.com/category/programming
https://www.biaodianfu.com/category/management
https://www.biaodianfu.com/category/architecture
https://www.biaodianfu.com/category/marketing
https://www.biaodianfu.com
http://www.biaodianfu.com/
https://www.biaodianfu.com/about
https://www.biaodianfu.com/archives
.....
有了BeautifulSoup以后,爬虫操作就变得特别简单了。脏活累活别人都帮忙做好了。
更多参考:Python数据解析工具:Beautiful Soup
5. utils
除了开源的库以外,还有些开源项目的 DataStruct.py
helper.py
utils.py
文件,也值得看一看。里面很多好东西,都是可以直接拿过来用的。