python笔记四
#!/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笔记四的更多相关文章
- guxh的python笔记四:迭代
1,可迭代对象iterable,迭代器iterator,生成器generator 可迭代对象iterable: 实现__iter__方法的类.__iter__方法返回iterator或者generat ...
- Python笔记(四)_字符串的方法
字符串的方法 []表示该参数时可选的,start和end参数表示范围 count(sub[, start[, end]]) 返回sub在字符串里边出现的次数 find(sub[, start[, en ...
- python笔记四(dict/set/不可变对象)
一.dict 字典是包含key_value存储方式.在放进去的时候,必须根据key值Hash出value的存放位置,这样,取的时候才能根据key直接拿到value. dict的操作: d = {'Mi ...
- python笔记四:面向对象
1.类 class Student(object): def __init__(self, name, score): self.name = name self.score = score 1)__ ...
- s21day22 python笔记
s21day22 python笔记 一.内容回顾及补充 模块补充 importlib.import_module:通过字符串的形式导入模块 #示例一: import importlib # 用字符串的 ...
- s21day21 python笔记
s21day21 python笔记 一.内容回顾及补充 内置函数补充 type():查看数据类型 class Foo: pass obj = Foo() if type(obj) == Foo: pr ...
- s21day13 python笔记
s21day13 python笔记 一.装饰器 目的:在不改变原函数内部代码的基础上,在函数执行之前和之后自动执行某个功能 应用场景:想要为函数扩展功能时,可以选择用装饰器 装饰器基本格式: def ...
- guxh的python笔记一:数据类型
1,基本概念 1.1,数据类型 基本数据类型:字符串,数字,布尔等 引用数据类型:相对不可变(元组),可变(列表,字典,集合等) 基本数据类型存放实际值,引用数据类型存放对象的地址(即引用) ==:判 ...
- s21day10 python笔记
s21day10 python笔记 一.函数补充 1.1 参数 基本参数知识 def get_list_date(aaa): #aaa:形式参数(形参) 任意个数 v = [11,22,33,44] ...
随机推荐
- js单击时页面的弹出
<!DOCTYPE html><html> <head> <script language="JavaScript&quo ...
- 日文NLP分词系统
mecab(http://mecab.sourceforge.net/)是奈良先端科技大学开发的日文分词系统,基于CRF的分词原理,有c++实现,提供python.perl.ruby等接口 日文NLP ...
- element-UI 点击一行,背景色变化
代码: @row-click="rowClick" 当某一行被点击时会触发该事件 :row-class-name="tableRowClassName" 可以 ...
- 数字IC设计工程师成长之路
学习的课程 仿真工具VCS实践学习 2019年12月9日-2019年12月23日
- VS 2019企业版激活码
Visual Studio 2019 EnterpriseBF8Y8-GN2QH-T84XB-QVY3B-RC4DF
- electron-vue中关闭烦人的es语法检查
本项目环境是 electron-vue搭建的项目,项目结构根vue-cli创建的项目结构稍微有所不同 主要修改的地方有3个 把这3个文件里面的以下代码全部删掉 { test: /\.(js)$/, e ...
- Delphi如何实现无边框窗体的移动
在控件的MouseDown事件中加入if (ssleft in Shift) then begin ReleaseCapture; Perform(WM_syscommand, $F012, 0);e ...
- NX二次开发-UFUN重命名图纸页UF_DRAW_rename_drawing
#include <uf.h> #include <uf_draw.h> #include <uf_drf.h> #include <uf_obj.h> ...
- NX二次开发-UFUN获取一个图层类别的tag UF_LAYER_ask_category_tag
NX11+VS2013 #include <uf.h> #include <uf_ui.h> #include <uf_layer.h> UF_initialize ...
- Python中的动态类
Python中的动态类 有这样一个需求,我有SegmentReader.PostagReader.ConllReader这三个Reader,他们都继承于一个Reader类.在程序运行中,由用户通过se ...