python库精华

1、使用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是用来获取操作系统监控以及进程管理的

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

4、BeautifulSoup 比XPath好用一百倍

一、例如,要找到页面中所有的links,如下所示:
from bs4 import BeautifulSoup
soup = BeautifulSoup(open("index.html"))
for link in soup.find_all('a'):
print(link.get('href'))

二‘例如,我在编写知乎的爬虫的时候,对于每一个用户的”关注”页面,对于每一个关注对象,有如下的tag:
<div class="zm-profile-card zm-profile-section-item zg-clear no-hovercard">
    .......
<a title="天雨白" data-hovercard="p$t$tian-yu-bai" class="zm-item-link-avatar" href="/people/tian-yu-bai">
</a>
    .......
</div>

三、例如,解析单个关注的用户代码如下所示:
soup = BeautifulSoup(text)
#通过属性找到这个div,对于每个用户,对应于这样一个div
items = soup.find_all('div', class_="zm-profile-card zm-profile-section-item zg-clear no-hovercard")
for item in items:
# 获取这个div下的<a>标签的title属性
name = item.a.attrs['title']
# 获取这个div下的<a>标签下的<img>标签里面的src属性
avatar  = item.a.img.attrs['src']

5、sanic uvloop 

1. Sanic + uvloop链接:Sanic: channelcat/sanicuvloop: 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。

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

6、数据处理库Modin

 7、feedparser

feedparser是一个Python的Feed解析库,可以处理RSS ,CDF,Atom 。使用它我们可从任何 RSS 或 Atom 订阅源得到标题、链接和文章的条目了。RSS(Really Simple Syndication,简易信息聚合)是一种描述和同步网站内容的格式你可以认为是一种定制个性化推送信息的服务。它能够解决你漫无目的的浏览网页的问题。它不会过时,信息越是过剩,它的意义也越加彰显。网络中充斥着大量的信息垃圾,每天摄入了太多自己根本不关心的信息。让自己关注的信息主动来找自己,且这些信息都是用户自己所需要的,这就是RSS的意义。

parse() 方法

feedparser 最为核心的函数自然是 parse() 解析 URL 地址的函数。
我们知道,每个RSS和Atom订阅源都包含一个标题(d.feed.title)和一组文章条目(d.entries)
通常每个文章条目都有一段摘要(d.entries[i].summary),或者是包含了条目中实际文本的描述性标签

#!/usr/bin/env python
from sanic import Sanic
from sanic.response import json
from feedparser import parse

app = Sanic()

@app.route("/")
async def index(request):
    url = "http://blog.howie6879.cn/atom.xml"
    feed = parse(url)
    articles = feed['entries']
    data = []
    for article in articles:
        data.append({"title": article["title_detail"]["value"], "link": article["link"]})
    return json(data)

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

 

 















posted @ 2022-10-09 16:05  pearlcity  阅读(36)  评论(0编辑  收藏  举报