#!/usr/bin/env python3
from datetime import datetime, timedelta
# datetime是模块,datetime模块还包含一个datetime类
now = datetime.now()
print(now) # 2019-09-19 11:20:42.173987
print(datetime(2019,9,19,11,21)) #2019-09-19 11:21:00
print(now.timestamp()) #1568863370.637641 转时间戳 Python的timestamp是一个浮点数。如果有小数位,小数位表示毫秒数
print(datetime.fromtimestamp(1568863370)) # 2019-09-19 11:22:50 时间戳转datetime
print(datetime.strptime('2019-9-19 11:33:20','%Y-%m-%d %H:%M:%S')) # 2019-09-19 11:33:20 字符串转datetime
print(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) #2019-09-19 11:36:13 把时间转字符串 # timedelta 处理时间加减
print(datetime.now() + timedelta(days=2,hours=1, minutes=20)) # 2019-09-21 13:01:41.009561 # namedtuple namedtuple是一个函数,它用来创建一个自定义的tuple对象,
# 并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素 from collections import namedtuple
# 具名元组
d = namedtuple('dot', ['a', 'b', 'c', 'd']) d = d(1,2,3,4)
print(d.a,d.b,d.c,d.d) #1 2 3 4 # 具名元组除了拥有继承自基本元组的所有方法之外,还提供了额外的几个方法和两个属性,为了防止命名冲突,这些方法都会以下划线开头 list = [1,2,3,4]
d._make(list) # 使用这个函数来构建具名元组实例
print(d) # dot(a=1, b=2, c=3, d=4) # 修改对象属性,使用"_replace"方法 不是直接修改原来的对象
mod = d._replace(a=11)
print(mod) # dot(a=11, b=2, c=3, d=4) # 对象转换成字典,使用"_asdict"
print(d._asdict()) # OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)]) # Base64是一种用64个字符来表示任意二进制数据的方法
# Base64编码会把3字节的二进制数据编码为4字节的文本数据,长度增加33%,好处是编码后的文本数据可以在邮件正文、网页等直接显示
# Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据
import base64
# 转base64
b = base64.b64encode('我是谁啊'.encode('utf-8'))
print(b)
#
print(base64.b64decode(b)) # 由于标准的Base64编码后可能出现字符+和/,在URL中就不能直接作为参数,所以又有一种"url safe"的base64编码,其实就是把字符+和/分别变成-和_
# base64.urlsafe_b64encode()
# base64.urlsafe_b64decode() # MD5
# 由于常用口令的MD5值很容易被计算出来,所以,要确保存储的用户口令不是那些已经被计算出来的常用口令的MD5,
# 这一方法通过对原始口令加一个复杂字符串来实现,俗称“加盐”:
# md5(message + salt) import hashlib md5 =hashlib.md5()
md5.update('hello leyi'.encode('utf-8'))
print(md5.hexdigest()) # 2fd60377888d53f6dafef6f8da3c09c2 # 如果数据量很大,可以分块多次调用update(),结果一样
md5.update('hello'.encode('utf-8'))
md5.update(' leyi'.encode('utf-8'))
print(md5.hexdigest()) #2fd60377888d53f6dafef6f8da3c09c2 # 另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似
sha1 = hashlib.sha1() # Python自带的hmac模块实现了标准的Hmac算法,跟md5加盐加密类似 import hmac # hmac.new(key, message, digestmod='MD5') digestmod 为采用的算法
secret = hmac.new('关键字盐'.encode('utf-8'), '需要加密内容'.encode('utf-8'), digestmod='MD5')
print(secret.hexdigest()) # urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应
from urllib import request, parse
import ssl ssl._create_default_https_context = ssl._create_unverified_context # req = request.Request('http://api-doc.xxx.cn/api/user/login')
# req.add_header('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36')
# req.add_header('Origin', 'http://api-doc.xxx.cn')
# req.add_header('Referer', 'http://api-doc.xxx.cn/login')
#
# name = input('输入账户:')
# password = input('输入密码:')
# login_data = parse.urlencode([
# ('email', name),
# ('password', password),
# ])
#
# with request.urlopen(req, data = login_data.encode('utf-8')) as f:
# d = f.read()
# print(dir(f))
# print(f.status)
# print(d.decode('utf-8')) from html.parser import HTMLParser # 继承HTMLParser
class ReWriteHTMLParser(HTMLParser): def __init__(self):
HTMLParser.__init__(self)
self.metas = [] # 重写
def handle_starttag(self, tag, attrs):
if tag == "meta":
if len(attrs) == 0:
pass
else:
for (key, value) in attrs:
if (key == "content"):
self.metas.append(value) parser = ReWriteHTMLParser()
parser.feed(
'''
<meta id="cross-request-sign" charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="keywords" content="yapi接口管理,api管理,接口管理,api,接口,接口文档,api文档,接口管理系统" />
<meta name="description" content="YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。" />
<title>YApi-高效、易用、功能强大的可视化接口管理平台</title>
<link rel="icon" type="image/png" sizes="192x192" href="/image/favicon.png">
<script>
document.write('<script src="/prd/assets.js?v=' + Math.random() + '"><\/script>');
</script> <script>
document.write('<link rel="stylesheet" href="/prd/' + window.WEBPACK_ASSETS['index.js'].css + '" />');
</script>
'''
)
# ['width=device-width, initial-scale=1, shrink-to-fit=no',
# 'yapi接口管理,api管理,接口管理,api,接口,接口文档,api文档,接口管理系统',
# 'YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。
# 可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,
# 开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。']
print(parser.metas) # 获取开始标签为meta attrs个数不为0的content值集合

 

python笔记四的更多相关文章

  1. guxh的python笔记四:迭代

    1,可迭代对象iterable,迭代器iterator,生成器generator 可迭代对象iterable: 实现__iter__方法的类.__iter__方法返回iterator或者generat ...

  2. Python笔记(四)_字符串的方法

    字符串的方法 []表示该参数时可选的,start和end参数表示范围 count(sub[, start[, end]]) 返回sub在字符串里边出现的次数 find(sub[, start[, en ...

  3. python笔记四(dict/set/不可变对象)

    一.dict 字典是包含key_value存储方式.在放进去的时候,必须根据key值Hash出value的存放位置,这样,取的时候才能根据key直接拿到value. dict的操作: d = {'Mi ...

  4. python笔记四:面向对象

    1.类 class Student(object): def __init__(self, name, score): self.name = name self.score = score 1)__ ...

  5. s21day22 python笔记

    s21day22 python笔记 一.内容回顾及补充 模块补充 importlib.import_module:通过字符串的形式导入模块 #示例一: import importlib # 用字符串的 ...

  6. s21day21 python笔记

    s21day21 python笔记 一.内容回顾及补充 内置函数补充 type():查看数据类型 class Foo: pass obj = Foo() if type(obj) == Foo: pr ...

  7. s21day13 python笔记

    s21day13 python笔记 一.装饰器 目的:在不改变原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能 应用场景:想要为函数扩展功能时,可以选择用装饰器 装饰器基本格式: def ...

  8. guxh的python笔记一:数据类型

    1,基本概念 1.1,数据类型 基本数据类型:字符串,数字,布尔等 引用数据类型:相对不可变(元组),可变(列表,字典,集合等) 基本数据类型存放实际值,引用数据类型存放对象的地址(即引用) ==:判 ...

  9. s21day10 python笔记

    s21day10 python笔记 一.函数补充 1.1 参数 基本参数知识 def get_list_date(aaa): #aaa:形式参数(形参) 任意个数 v = [11,22,33,44] ...

随机推荐

  1. 【学术篇】CF935E Fafa and Ancient Mathematics 树形dp

    前言 这是一道cf的比赛题.. 比赛的时候C题因为自己加了一个很显然不对的特判WA了7次但找不出原因就弃疗了... 然后就想划水, 但是只做了AB又不太好... 估计rating会掉惨 (然而事实证明 ...

  2. 49. ArrayList LinkedList中特有的方法

    集合的体系:--------------| Collection  单列集合的根接口 ----------| List 如果实现了List接口的集合类,该类具备的特点是:有序,可重复 ------|A ...

  3. thinkphp 缓存驱动

    缓存驱动默认位于Think\Cache\Driver命名空间下面,目前已经提供了包括APC.Db.Memcache.Shmop.Sqlite.Redis.Eaccelerator和Xcache缓存方式 ...

  4. 线段树区间离散化维护按秩合并并查集(可撤销)——牛客多校第八场E

    模板题..去网上学了可撤销的并查集.. /* 给定一个无向图,边的属性为(u,v,l,r),表示<u,v>可以通过的size为[l,r] 求出有多少不同的size可以从1->n 把每 ...

  5. 4.RabbitMQ Linux安装

    这里使用的Linux是CentOS6.2 将/etc/yum.repo.d/目录下的所有repo文件删除 先下载epel源 # wget -O  /etc/yum.repos.d/epel-erlan ...

  6. LeetCode 182. Duplicate Emails (查找重复的电子邮箱)

    题目标签: 题目给了我们一个 email 的table,让我们找到重复的 email. 可以建立 Person a, Person b, 找到两个表格中,emai 相等 但是 id 不同的 email ...

  7. Zookeeper怎么实现分布式锁?

    对访问资源 R1 的过程加锁,在操作 O1 结束对资源 R1 访问前,其他操作不允许访问资源 R1.以上算是对独占锁的简单定义了,那么这段定义在 Zookeeper 的"类 Unix/Lin ...

  8. 关于strtok函数

    函数原型: char *strtok(char * strToken, const char *strDelimit) 参数说明: strToken:源字符串,即待分割的串 strDelimit:st ...

  9. FILE_OBJECT

    https://msdn.microsoft.com/en-us/library/windows/hardware/ff545834(v=vs.85).aspx The FILE_OBJECT str ...

  10. DIV+CSS网页布局常用的一些基础知识

    CSS命名规范 一.文件命名规范 全局样式:global.css:框架布局:layout.css:字体样式:font.css:链接样式:link.css:打印样式:print.css: 二.常用类/I ...