【293】博客园自动添加样式代码
如下的博客内容,只有标题和目录内容,通过python脚本对其HTML内容进行处理,为其添加标题样式以及锚点,并为目录添加对应的链接地址
目录:
- 一、测试
- 二、测试
- 三、测试
- 四、测试
- 五、测试
一、测试
二、测试
三、测试
四、测试
五、测试
对应的HTML源代码如下所示:
<p>目录:</p> <ul> <li>一、测试</li> <li>二、测试</li> <li>三、测试</li> <li>四、测试</li> <li>五、测试</li> </ul> <p>一、测试</p> <p>二、测试</p> <p>三、测试</p> <p>四、测试</p> <p>五、测试</p>
操作步骤:将上面HTML复制,然后调用如下的方法,方法已经写好了
>>> from blog_diy import * >>> blog1.titleChange()
会将结果自动复制到剪切板上,得到结果如下:
<p>目录:</p> <ul> <li><a href="#A01">一、测试</a></li> <li><a href="#A02">二、测试</a></li> <li><a href="#A03">三、测试</a></li> <li><a href="#A04">四、测试</a></li> <li><a href="#A05">五、测试</a></li> </ul> <div class="title_hh"><a name="A01"></a><strong>一、测试</strong></div> <div class="arrow-left"> </div> <div class="title_hh"><a name="A02"></a><strong>二、测试</strong></div> <div class="arrow-left"> </div> <div class="title_hh"><a name="A03"></a><strong>三、测试</strong></div> <div class="arrow-left"> </div> <div class="title_hh"><a name="A04"></a><strong>四、测试</strong></div> <div class="arrow-left"> </div> <div class="title_hh"><a name="A05"></a><strong>五、测试</strong></div> <div class="arrow-left"> </div>
效果如下所示:
目录:
内容如下,一级标题用“标题1”的样式,二级标题用“标题2”的样式
一、测试
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
1.1 测试第二级标题
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
1.2 测试第二级标题
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
1.3 测试第二级标题
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
二、测试
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
三、测试
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
3.1 测试第二级标题
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
3.2 测试第二级标题
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
3.3 测试第二级标题
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
四、测试
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
五、测试
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
5.1 测试第二级标题
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
5.2 测试第二级标题
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
5.3 测试第二级标题
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
HTML 源代码如下:
<h1>一、测试</h1> <p> 正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文</p> <h2>1.1 测试第二级标题</h2> <p> 正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文</p> <h2>1.2 测试第二级标题</h2> <p> 正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文</p> <h2>1.3 测试第二级标题</h2> <p> 正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文</p> <h1>二、测试</h1> <p> 正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文</p> <h1>三、测试</h1> <p> 正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文</p> <h2>3.1 测试第二级标题</h2> <p> 正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文</p> <h2>3.2 测试第二级标题</h2> <p> 正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文</p> <h2>3.3 测试第二级标题</h2> <p> 正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文</p> <h1>四、测试</h1> <p> 正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文</p> <h1>五、测试</h1> <p> 正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文</p> <h2>5.1 测试第二级标题</h2> <p> 正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文</p> <h2>5.2 测试第二级标题</h2> <p> 正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文</p> <h2>5.3 测试第二级标题</h2> <p> 正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文</p>
操作代码: 引用两个函数即可,首先需要复制上面源码,然后调用如下函数
>>> from blog_diy import * >>> blog1.changeTitleAndContents_Tier1() >>> blog1.changeTitleAndContents_Tier2()
实现效果如下:
目录:
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文正文
源码如下:
def changeTitleAndContents_Tier1(): # 将得到的结果自动复制到剪贴板上 # 本函数针对整个HTML代码 # 包括前面目录部分自动添加 目录 & 链接 # 后面标题部分自动添加标题样式以及锚点 # 需要引用其他函数 # 参数来自于剪切板复制 # 标题特点,按照标题1格式的<h1> "为一级标题添加特殊样式、添加目录、为目录添加链接 的 HTML 代码(针对没有添加目录的源码)" # 为Unicode编码,为了统一复制来的数据编码 contents = [u'<p>目录:</p>', u'<ul>'] # 需要调用里面关于剪切板的函数 from win_diy import * str_all = win.getClipboard() str_all_array = str_all.splitlines() # 查找其所在行 # 转换为 Unicode 编码才可以操作 # 为标题添加样式以及锚点 i = 0 for s in str_all_array: # 查找<h2> if s.find(u'<h1>') >= 0: index_end = s.find(u'</') index = s.rfind(u'>', 0, index_end) + 1 title = s[index:index_end] str_all_array[i] = getTitleByNum(title) # 添加Unicode编码字符,将目录内容叠加 contents.append(contentAnchor(u'<li>' + title + '</li>')) i = i + 1 # 最后叠加结尾部分 contents.append(u'</ul>') # 将目录内容后面叠加原修改后列表,再将结果赋值给 str_all_array contents.extend(str_all_array) str_all_array = contents # 通过回车将列表合并起来 n = '\n' win.addToClipboard(n.join(str_all_array)) def changeTitleAndContents_Tier2(): # 将得到的结果自动复制到剪贴板上 # 本函数针对整个HTML代码 # 包括前面目录部分自动添加链接 # 后面标题部分自动添加标题样式以及锚点 # 需要引用其他函数 # 参数来自于剪切板复制 "为“二级”标题添加特殊样式的 HTML 代码 —— title 为名称 —— index 为锚点名称" # 为Unicode编码,为了统一复制来的数据编码 contents_t2 = [u'\n<ul>', u'\n<ul>', u'\n<ul>', u'\n<ul>', u'\n<ul>', u'\n<ul>', u'\n<ul>', u'\n<ul>'] flag = [0, 0, 0, 0, 0, 0, 0, 0] # 需要调用里面关于剪切板的函数 from win_diy import * str_all = win.getClipboard() str_all_array = str_all.splitlines() # 转换为 Unicode 编码才可以操作 # 直接遍历查找<h2> # 为标题添加样式以及锚点 i = 0 # 存储二级标题的第一个数字 num_1 = '0' for s in str_all_array: # 查找<h2> if s.find(u'<h2>') >= 0: # 由于左侧可能有多余的标签,需要先查询"</" # 类型一:<h2>4.1 必备参数</h2> # 类型二:<h2><span style="font-size: 15px;"><strong>4.3 缺省参数</strong></span></h2> index_end = s.find(u'</') # 从右侧查询,终点为index_end index = s.rfind(u'>', 0, index_end) + 1 title = s[index:index_end] # 获取标题的数字内容,例如"4.1 必备参数"获取4和1 index_dot = title.find(u'.') index_space = title.find(u' ') num_1 = title[0:index_dot] num_2 = title[(index_dot+1):index_space] # 添加样式和锚点,命名规则"N_4_1" str_all_array[i] = '<div class="title_hh2"><a name="A_'+num_1+'_'+num_2+'"></a>' + title + '</div>' # 如果存在二级标题,则为flag赋值 flag[int(num_1)] = 1 # 添加Unicode编码字符,将目录内容叠加 contents_t2[int(num_1)] = contents_t2[int(num_1)] +'\n<li><a href="#A_'+num_1+'_'+num_2+'">'+title+'</a></li>' i = i + 1 # 将二级目录添加到代码中,通过数字进行迭代 # 迭代flag为1的部分 for f in range(0, len(flag)): if flag[f] == 1: contents_t2[f] = contents_t2[f] + '\n</ul>' i = 0 for line in str_all_array: if line.find(u"#A0"+str(f)) >= 0: index = line.find(u"</li>") str_all_array[i] = line[0:index] + contents_t2[f] + "\n</li>" print str_all_array[i] i = i + 1 # 通过回车将列表合并起来 n = '\n' win.addToClipboard(n.join(str_all_array))