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] ...
随机推荐
- Java设计模式思想(单列模式,工厂模式,策略模式)
a) 单例模式:单例模式核心只需要new一个实例对象的模式,比如数据库连接,在线人数等,一些网站上看到的在线人数统计就是通过单例模式实现的,把一个计时器存放在数据库或者内存中,当有人登陆的时候取出来加 ...
- python_django_中间件
什么是中间件? 可以介入django的请求和响应的轻量级的底层插件,它其实就是一个python类,我们在settings配置文件中的↓↓↓↓,都是中间件 MIDDLEWARE = [ 'django. ...
- 基于javaweb人脸识别注册登录系统
---恢复内容开始--- 现在是2019年,人脸识别技术已经相当成熟了,百度自2017年发布人脸识别技术,已经被广泛应用,不管从现在的iphoneX掀起的面部解锁到手机应用端的各种人脸认证,这一技术已 ...
- Vue开发实战
递归组件 关键是组件在模板内能调用自身,关键是name属性 首先我们先定义数据格式 list: [ { title: '标题1' }, { title: '标题2', children: [ { ti ...
- WPF 模仿 UltraEdit 文件查看器系列 开篇和导读
WPF 模仿 UltraEdit 文件查看器系列 开篇和导读 运行环境:Win10 x64, NetFrameWork 4.8, 作者:乌龙哈里,日期:2019-05-10 学 .Net FrameW ...
- 七牛云-C#SDK-上传-前期准备
1.创建一个asp.net core MVC 程序(这里随便) 这是一个空的程序 2.创建UploadController 3.添加引用 Install-Package Newtonsoft.Json ...
- leetcode-685-冗余连接②
题目描述: 参考后提交:并查集: class Solution: def findRedundantDirectedConnection(self, edges: List[List[int]]) - ...
- oracle一体机(exdata)创建ACFS文件系统
ACFS是一个支持多个平台,可扩展的,基于ORACLE ASM的集群文件系统,可以用来存储数据库和各种应用的文件,包括数据库的trace文件,alert日志文件和配置文件等等,也可以用来存储视频,音频 ...
- 《Java语言程序设计》编程练习6.18(检测密码)
6.18 (检测密码)一些网站对于密码具有一些规则.编写一个方法,检测字符串是否是一个有效密码. 假定密码规则如下: • 密码必须至少8位字符. • 密码仅能包含字母和数字. ...
- spring boot 结合jsp简单示例
引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...