加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
tag.py 2.11 KB
一键复制 编辑 原始数据 按行查看 历史
xqm32 提交于 2020-04-14 23:45 . 重写代码,超级优化
from get import *
from settings import *
IS_QUOTE = False
def set_quote(state=True):
global IS_QUOTE
IS_QUOTE = state
def is_quote():
return IS_QUOTE
def text(t): # 第一个子标签前的内容,参见 https://lxml.de/api/lxml.etree._Element-class.html 中的 text
return t.text.strip() if t.text else str()
def tail(t): # 标签结尾的内容,参见 https://lxml.de/api/lxml.etree._Element-class.html 中的 tail
return t.tail.strip() if t.tail else str()
def quote(t):
set_quote(True)
return tail(t)
i_class = { # i 标签的 class 判断函数
'pstatus': lambda t: tail(t) # 发表或者编辑的时间
}
div_class = { # div 标签的 class 的判断函数
'quote': lambda t:
text(t)+inter(t)+tail(t)
if get_setting('回复')
else quote(t), # 引用
'tip tip_4 aimg_tip': lambda t: tail(t),
'modact': lambda t: tail(t), # 状态
'cm': lambda t: tail(t), # 评论
'rate': lambda t: tail(t), # 评分
'locked': lambda t: tail(t) # 被删除的帖子
}
tag_name = { # 根据标签名字判断函数
'div': lambda t:
div_class[t.get('class')](t)
if t.get('class') in div_class
else '\n'+text(t)+inter(t)+tail(t),
'p': lambda t:
'\n'+text(t)+'\n'+inter(t)+tail(t),
'br': lambda t:
'\n'+text(t)+inter(t)+tail(t),
'i': lambda t:
i_class[t.get('class')](t)
if t.get('class') in i_class
else text(t)+inter(t)+tail(t),
'img': lambda t:
'\n'+t.get('file')+'\n'
if get_setting('图片') and t.get('file')
else tail(t),
'a': lambda t:
'['+t.get('href')+' '+text(t)+']'+tail(t)
if get_setting('链接') and t.get('href')
else tail(t),
'blockquote': lambda t:
'\n【引用开始】\n'+tail(t.find("br"))+'\n【引用结束】\n'
}
def inter(t): # 标签内部的内容
content = str()
for i in t.iterchildren():
content += tag(i)
return content
def tag(t): # 仅作判断使用,与 inter() 相互调用
return tag_name[t.tag](t) if t.tag in tag_name else text(t)+inter(t)+tail(t)
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化