大家好,感谢邀请,今天来为大家分享一下html生成网站源码的问题,以及和Python基础教程书籍案例:转换文档为HTML的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
练习目标
将指定的纯文本文档转换为HTML文件。
实现目标
在浏览器中打开最终生成的HMTL文件,呈现下图的样式。
关键内容
python数据挖掘,python爬虫
练习这个项目,最好具备一些HTML基础。
如果没有接触过,这里我做一下简单的介绍。
HTML文件是我们常见的网页文件,其中包含HTML源代码。
HTML源代码由HTML标签组成,这些标签往往是成对出现(个别除外)。
一个简单的HTML示例代码:
<html>
<head>
<metacharset=“gbk”>
<title>…</title>
</head>
<body>
<h1>一级标题</h1>
<p>我是段落内容。</p>
</body>
</html>
上方的代码复制到一个文本文档中,并将文件后缀改为“.html”,在浏览器中打开即可看到效果。
这里我们看到了一些标签:
<html>和</html>之间是描述网页的内容<head>和</head>之间是描述页面头部内容<meta>包含有关页面的元信息<title>和</title>之间是显示在浏览器标签上的页面标题<body>和</body>之间是描述可见的页面主体内容<h1>和</h1>之间的文本内容被显示为一级标题<p>和</p>之间的文本内容被显示为文本段落
另外,在这个案例中我们还会用到一些标签。
<a>和</a>可以为标签之间的文本添加链接<ul>和</ul>之间是内容列表<li>和</li>之间是列表项<strong>和</strong>之间是加重的文本内容</br>是可以对内容进行换行的换行标签
案例分析
当我们了解了HTML的结构和各种标签的作用,接下来,我们分析一下,如何进行文档与HTML的转换。
1、原始文档中的标题都是大写英文字母开头和英文字母结尾。
2、文档中除了标题,就是段落和列表,段落和列表的区别是:列表中包含列表项。
3、段落中存在换行。
4、列表项(以“●”开头)需要放置于列表中。
3、文档中“*”之间的内容需要加重显示。
实现过程
一、定义处理原始文档内容的模块(util.py)
1、定义一个生成器“lines”,能够为原始文档结尾添加空行。
deflines(file):
forlineinfile:
yieldline为文件末尾添加空行,保证最后添加到block的行能够被生成。
为什么需要在文档末尾添加空行,可以看下方生成器“blocks”代码中的注释进行理解。
2、定义一个生成器“blocks”,对原始文档内容进行读取,当读取到空行,将已读取的内容连接为内容块并生成。
defblocks(file):
block=[]
forlineinlines(file):
ifline.strip():添加行内容到列表
elifblock:连接列表中所有的行内容
block=[]
二、定义处理文档的主程序模块(main01.py)
在这个模块中,我们需要导入一些需要使用的内置模块。
sys:用于获取命令行终端的输入re:通过正则表达式模块对原始文档内容进行替换。
以下是主程序的具体代码,大家可以通过注释理解整个处理过程。
importsys,re
fromutilimport*
print(‘<html><head><metacharset=”gbk”><title>doc.txt</title></head><body>’)获取系统标准输入
forblockinblocks:替换内容块中两个星号间的内容为加重样式
block=re.sub(r’\\n*-*(.+)’,’\\n<li>\\\\1</li>’,block)替换内容块中换行符“\\n”为换行标签
ifre.match(r'(^[A-Z][\\w]+[A-Za-z]$)’,block):添加一级标题标签
elif'<li>’inblock:添加项目列表标签
else:
print(‘<p>’+block+'</p>’)添加HTML结束标签
当我们完成以上代码的编写,就可以通过命令行终端执行代码。
pythonmain01.py<doc.txt>doc.html
通过以上命令就能够让主程序读取项目文件夹下的“doc.txt”,并且经过处理后输出文件“doc.html”。
这个文件会自动出现在PyCharm左侧文件列表中,在文件名称上点击鼠标右键,选择浏览器中打开(OpeninBrowser),就能够使用指定的浏览器进行浏览了。
在下一篇练习项目的教程中,我们将通过另外一种复杂的,但是具有很好扩展性的方式重新实现这个项目。
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!
