原理:利用xml.etree.ElementTree對html進行決議和寫入
import xml.etree.ElementTree as ET # 決議html、xml def circle(): print('輸入again回到程式開始處,輸入exit退出程式') tree = ET.parse('book.html') # 決議檔案 root = tree.getroot() # 獲取根節點 link_div = root.find('div[@id="link"]') # 獲取link區的div節點,注意find和findall只能查找直接子元素 body_div = root.find('div[@id="body"]') # 獲取body區的div節點 h1List = link_div.findall('div') count1 = 1 for i in h1List: # 列出所有h1標題 print(str(count1) + '、' + i.find('h1').find('a').text) count1 += 1 def create_h1(): # 創造h1節點 h1_text = input('輸入章節名:') if h1_text == 'again': circle() elif h1_text == 'exit': print('program terminated!') else: h1_link_div = ET.Element('div') # 創造節點 h1_link_h1 = ET.Element('h1') h1_link_a = ET.Element('a') h1_link_a.text = h1_text h1_link_a.set('href', f'#{len(h1List) + 1}') # 設定a節點的屬性 h1_link_h1.append(h1_link_a) # 懸掛節點 h1_link_div.append(h1_link_h1) link_div.append(h1_link_div) # 寫入link區 h1_body_div = ET.Element('div') # 創造節點 h1_body_h1 = ET.Element('h1') h1_body_h1.text = h1_text h1_body_div.set('id', f'{len(h1List) + 1}') h1_body_div.append(h1_body_h1) body_div.append(h1_body_div) # 寫入body區 newTree = ET.ElementTree(root) # root為修改后的root newTree.write('book.xml', encoding='utf-8') # 重新寫入xml,進行更新,需要宣告編碼,否則寫入后會亂碼 circle() def create_h2(): # 創造h2節點 h2_text = input('輸入章節名:') if h2_text == 'again': circle() elif h2_text == 'exit': print('program terminated!') else: h2_link_div = ET.Element('div') h2_link_h2 = ET.Element('h2') h2_link_a = ET.Element('a') h2_link_a.text = h2_text h2_link_a.set('href', f'#{len(h1List)}_{len(h2List) + 1}') h2_link_h2.append(h2_link_a) h2_link_div.append(h2_link_h2) h1List[int(a) - 1].append(h2_link_div) h2_body_div = ET.Element('div') h2_body_h2 = ET.Element('h2') h2_body_h2.text = h2_text h2_body_div.set('id', f'{len(h1List)}_{len(h2List) + 1}') h2_body_div.append(h2_body_h2) body_div.findall('div')[int(a) - 1].append(h2_body_div) newTree = ET.ElementTree(root) newTree.write('book.xml', encoding='utf-8') circle() def create_statement(): # 創造h2下的內容 p_text = input('輸入內容:') if p_text == 'again': circle() elif p_text == 'exit': print('program terminated!') else: p = ET.Element('p') p.text = p_text h2.append(p) newTree = ET.ElementTree(root) newTree.write('book.xml', encoding='utf-8') create_statement() print('在此處創建輸入0\n選擇章節輸入序號') a = input('輸入:') # 輸入的為字串而非數字 if a == '0': create_h1() else: h2List = link_div.findall('div')[int(a) - 1].findall('div') count2 = 1 for i in h2List: # 列出所有h2標題 print(str(count2) + '、' + i.find('h2').find('a').text) count2 += 1 print('在此處創建輸入0\n選擇章節輸入序號') b = input('輸入:') if b == '0': create_h2() else: h2 = body_div.findall('div')[int(a) - 1].findall('div')[int(b) - 1] # 選擇的h2節點 pList = h2.findall('p') # 列出所有h2標題下的內容 for i in pList: print(i.text) create_statement() tree = ET.ElementTree(root) # root為修改后的root tree.write('book.html', encoding='utf-8') # 重新寫入xml,進行更新,需要宣告編碼,否則寫入后會亂碼 circle() # 回圈往復
注意千萬要仔細檢查,本人就是因為某個變數打錯字了,沒有發現,耽擱了很久……總之現在是順利地解決了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/463475.html
標籤:其他
上一篇:分布式鎖的實作方案
