之前學委寫了一篇熱榜長榜單爬蟲截屏的文章,
很多讀者留言說把熱榜截圖不太好決議,做一個串列更加直觀, 是的,是所以我們下面先看看只用python就把html頁面給生成了,
這里先展現一個神奇“dominate“,效果圖如下:

本文會帶你從0學會這個dominate,并成為高手!
dominate 是什么
一個python庫,讓開發者使用純python編程的方式來撰寫構造html/檔案樹,支持優雅的標簽背景關系串聯,直觀的撰寫出html頁面,所以,如果你沒有html知識也是可以的,當然html知識很簡單易懂,
安裝使用
安裝
pip install dominate
保存下面代碼為basic_html.py, 然后運行,
from dominate.tags import *
print(html(body(h1('雷學委的Dmoniate Demo!'))))

這就搞定了,html網頁內容生成了,
請看這上面黑色的html代碼輸出結果,來閱讀代碼:
- 代碼需要從內往外解讀
- h1塊標簽生成,內置文本:雷學委的Dominate Demo!
- 生成body標簽,這里h1標簽物件傳入body函式中,所以需要帶上h1標簽展示
- 生成html標簽,這里body傳入html函式了,需要展示body的內容,
解讀結束,
保存網頁為報表檔案
from dominate.tags import *
_html = html(body(h1('雷學委的Dmoniate Demo!')))
print(_html)
with open('./report.html','w') as file:
file.write(_html.render())
主要是呼叫了dominate標簽物件的render函式,生成字串內容輸出都檔案中,
這就完事了,小白學會可以直接給學委三連了,
再深度玩玩dominate
進一步基礎操作如下,直接配合圖片看代碼,
"""雷學委Demo代碼,記得三連支持!"""
from dominate.tags import *
print(html(body(h1('雷學委的Dmoniate Demo!'))))
#生成div塊標簽,帶上row_id屬性
user_label = label("username", cls='classname leiXueWei', fr='someinput')
print(user_label)
#生成div塊標簽,帶上row_id屬性
data_div = div(row_id="001")
print(data_div)
#生成id為header的div塊標簽
header = div()
header['id'] = 'header'
print(header)
保存上面內容為basic_html.py 運行,對應效果如下

高級操作
這里涉及的內容就更加難了,但是能夠作出更加復雜的頁面,而且能夠更加優雅的做出html頁面,難道不知道花點時間看看?
再花5分鐘直接把dominate全部帶回家!
高級操作之練手必備
保存下面代碼為complex_html_01.py, 然后運行,
"""雷學委Demo代碼,記得三連支持!"""
from dominate.tags import *
#嘗試迭代構建ul標簽塊
list = ul()
for item in range(6):
list += li('雷學委之Item #', item)
print(list)
#流式編程風格
leixuewei_menus = [
{"name":"Home","link":"/home"},
{"name":"LXW", "link":"/leiXueWei"},
{"name":"About","link":"/about"}
]
#leixuewei_menus.append({"name":"Home","link":"/home"})
print(ul(li(a(item['name'], href=item['link']), __pretty=False) for item in leixuewei_menus))
#一個簡單的檔案樹結構
_html = html()
_body = _html.add(body())
header = _body.add(div(id='header'))
content = _body.add(div(id='content'))
footer = _body.add(div(id='footer'))
print(_html)
#簡潔代碼
_html = html()
_head, _body = _html.add(head(title('學委種的簡單檔案樹-Document Tree')), body())
names = ['header', 'content', 'footer']
header, content, footer = _body.add([div(id=name) for name in names])
print(_html)
#使用render方法:獲取格式化的html
a = div(span('Hello World'))
print(a.render())
"""LeiXueWei Demo代碼,給大家直接白嫖了"""
給了代碼,還把執行結果圖送給大家了,必須跟這圖片看代碼,學習效率加倍!(PS:看學委的技術博客學習也是一樣的)

最后,看看這個優雅的代碼和修飾器
必須看看,因為學會之后寫代碼更加優雅了,
保存下面代碼為complex_html_02.py, 然后運行,
"""雷學委Demo代碼,記得三連支持!"""
from dominate.tags import *
#使用With背景關系管理來撰寫,更加直觀
h = html()
with h.add(body()).add(div(id='content')):
h1('Hello World!')
p('歡迎關注雷學委,一起學習...')
with table().add(tbody()):
l = tr()
l += td('One')
l.add(td('Two'))
with l:
td('Three')
print(h)
#使用修飾器,代碼更加簡潔可讀性
"""
下面代碼相當于:
def greeting(name):
with div() as d:
p("Hello %s" % name)
return d
"""
@div
def greeting(name):
p('Hello %s' % name)
print(greeting("Leivn"))
@div(h2('Welcome'), cls='greeting')
def greeting(name):
p('Hello %s' % name)
print(greeting('Levin'))
from dominate import document
#創建檔案
d = document()
print(d)
#標準的html檔案
d = document()
d += h1('Hello, World!')
d += p('This is a paragraph.')
print(d)
#支持原生html嵌入
from dominate.util import raw
td(raw('<a href="example.html">Example</a>'))
#創建svg
from dominate.svg import *
print(circle(stroke_width=5))
"""LeiXueWei Demo代碼,兄弟都白嫖這么多了,關注三連支持一下吧!"""
這一段代碼比較多,而且優雅一些,
重點是把握with背景關系風格,和@裝飾器,
其他代碼屬于更多功能展示,
運行效果如下,就不再截碎圖,那樣看也不太方面,留點時間寫新文章,上面操作也復雜多了,切碎了,建議配合圖片看代碼,

本來是把complex01和02這兩個放在一起的,切開兩個方便大家學習,
本文不需要總結,需要多多編程練習,散了,
對了,學委還有這個可以關注長期閱讀 =>雷學委趣味編程故事匯編
或者=> 雷學委NodeJS系列
持續學習持續開發,我是雷學委!
編程很有趣,關鍵是把技術搞透徹講明白,
創作不易,請多多支持,點贊收藏支持學委吧!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/293462.html
標籤:python
