整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          學會用HTML Help Workshop制作chm格式的電子書

          為一名編程人員,在學習各種編程語言時,會經常翻閱官方的chm幫助手冊學習,那么你是否也想制作一個自己的幫助文檔呢?下面和我一起做吧!

          1.首先制作html文檔

          如果要用到圖片,即將圖片和該html文檔放到同一個文件夾下,如果要用到css文件,最好也放在同一文件夾下.

          2.按以下圖步驟操作,工具HTML Help Workshop

          軟件界面

          新建方案

          新建方案第二步

          輸入方案名稱

          可以新建一個后綴名為hhp的文件,必須和htm文件在同一個目錄,名稱隨意。

          如果有,系統會提示已經存在,是否繼續使用,點擊是。

          選擇文件類型為html文件

          添加需要制作的htm文件

          選擇點擊打開

          然后下一步

          新建方案完成

          點擊目錄,會彈出一個框

          彈框選擇確定

          會分配一個默認的hhc文件名稱,可以修改,然后點擊保存

          目錄新建完之后的界面

          插入標題

          修改標題的默認圖標

          然后插入頁面,點擊否

          輸入頁面的名稱,添加頁面的相應文件

          點擊確定

          按照以上方法把所有需要添加的文件添加進來,頁面名稱可以修改

          最后點擊編譯,頁面之間的順序可以用上下左右尖頭調整主次

          編譯完成之后的截圖,學會了吧,小伙伴們!

          有很多文檔資料對于公司或個人來說非常重要,比如整理了好幾個月,搜羅整個網絡才找到,或者是公司核心資料,如果被他人隨意查閱泄漏出去,可能會造成不可估量的損失,利用具有加密功能的軟件(明鏡防泄密系統)對文件進行加密,在“數據保護策略配置”里,選擇要保護的文件類型,然后保存,這樣對于要保護的類型的文件即可做到加密保護,不再擔憂被泄密了。

          頭條創作挑戰賽# HTMLSelectElement對象是Excel VBA中用于表示網頁中的下拉列表的對象。通過該對象,可以獲取和設置下拉列表的選項、選中項、樣式等屬性。

          以下是6個代碼實例,展示了HTMLSelectElement對象的常見用法:

          1、創建HTMLSelectElement對象并向下拉列表中添加選項:

          Dim ie As Object
          Dim selectElement As Object
          
          Set ie = CreateObject("InternetExplorer.Application")
          ie.Visible = False
          ie.Navigate "https://www.example.com"
          
          Do While ie.Busy Or ie.ReadyState <> 4
              DoEvents
          Loop
          
          Set selectElement = ie.Document.getElementById("mySelect") ' 假設網頁中存在id為"mySelect"的下拉列表
          
          selectElement.Options.Add "Option 1" ' 添加選項1
          selectElement.Options.Add "Option 2" ' 添加選項2
          selectElement.Options.Add "Option 3" ' 添加選項3

          2、獲取下拉列表中當前選中的選項的值:

          Dim ie As Object
          Dim selectElement As Object
          Dim selectedOption As Object
          
          Set ie = CreateObject("InternetExplorer.Application")
          ie.Visible = False
          ie.Navigate "https://www.example.com"
          
          Do While ie.Busy Or ie.ReadyState <> 4
              DoEvents
          Loop
          
          Set selectElement = ie.Document.getElementById("mySelect") ' 假設網頁中存在id為"mySelect"的下拉列表
          
          Set selectedOption = selectElement.Selected
          MsgBox selectedOption.Value ' 顯示當前選中的選項的值

          3、設置下拉列表的選中項:

          Dim ie As Object
          Dim selectElement As Object
          
          Set ie = CreateObject("InternetExplorer.Application")
          ie.Visible = False
          ie.Navigate "https://www.example.com"
          
          Do While ie.Busy Or ie.ReadyState <> 4
              DoEvents
          Loop
          
          Set selectElement = ie.Document.getElementById("mySelect") ' 假設網頁中存在id為"mySelect"的下拉列表
          
          selectElement.Value = "Option 2" ' 將選項2設置為選中項

          4、獲取下拉列表中所有選項的數量:

          Dim ie As Object
          Dim selectElement As Object
          Dim optionCount As Integer
          
          Set ie = CreateObject("InternetExplorer.Application")
          ie.Visible = False
          ie.Navigate "https://www.example.com"
          
          Do While ie.Busy Or ie.ReadyState <> 4
              DoEvents
          Loop
          
          Set selectElement = ie.Document.getElementById("mySelect") ' 假設網頁中存在id為"mySelect"的下拉列表
          
          optionCount = selectElement.Options.Length ' 獲取選項數量
          MsgBox "選項數量:" & optionCount

          5、設置下拉列表的可見性:

          Dim ie As Object
          Dim selectElement As Object
          
          Set ie = CreateObject("InternetExplorer.Application")
          ie.Visible = False
          ie.Navigate "https://www.example.com"
          
          Do While ie.Busy Or ie.ReadyState <> 4
              DoEvents
          Loop
          
          Set selectElement = ie.Document.getElementById("mySelect") ' 假設網頁中存在id為"mySelect"的下拉列表
          
          selectElement.Style.Visibility = "hidden" ' 隱藏下拉列表

          6、禁用下拉列表的使用:

          Dim ie As Object
          Dim selectElement As Object
          
          Set ie = CreateObject("InternetExplorer.Application")
          ie.Visible = False
          ie.Navigate "https://www.example.com"
          
          Do While ie.Busy Or ie.ReadyState <> 4
              DoEvents
          Loop
          
          Set selectElement = ie.Document.getElementById("mySelect") ' 假設網頁中存在id為"mySelect"的下拉列表
          
          selectElement.Disabled = True ' 禁用下拉列表

          注意:以上示例中,需要先定義并創建InternetExplorer對象(ie)來實現對網頁的操作。使用ie.Navigate方法可以加載指定的網頁地址。在操作之前,需要確保網頁完全加載完成(通過判斷ie.Busyie.ReadyState屬性)。此外,根據實際網頁中下拉列表的特點和屬性,上述代碼可能需要進行一些調整。

          在使用HTMLSelectElement對象時,需要注意以下幾點:

          1、確保網頁加載完成:在使用HTMLSelectElement對象之前,需要確保相關網頁已經完全加載完成。可以通過監測InternetExplorer對象的BusyReadyState屬性來確定網頁是否加載完成。

          2、獲取選擇選項:使用HTMLSelectElement對象的Options屬性可以獲取下拉列表中的選項。可以使用Options.Item(index)或者Options.Item("value")來獲取指定索引或值的選項。

          3、設置選中選項:可以通過設置HTMLSelectElement對象的Value屬性來選中指定的選項。需要注意,選項的值必須與下拉列表中存在的選項值匹配。

          4、添加和移除選項:使用HTMLSelectElement對象的Options.Add方法可以向下拉列表中添加新的選項,使用Options.Remove方法可以移除指定的選項。

          5、獲取選中項:使用HTMLSelectElement對象的Selected屬性可以獲取當前選中的選項。可以通過Selected.Value來獲取選中選項的值。

          6、設置下拉列表的可見性和禁用狀態:在操作HTMLSelectElement對象時,還可以設置下拉列表的可見性和禁用狀態。可以通過設置Style.Visibility屬性來控制下拉列表的可見性,使用Disabled屬性可以禁用下拉列表的使用。

          7、異常處理:在操作HTMLSelectElement對象時,可能會遇到一些異常情況,比如找不到指定的下拉列表或選項。需要適時進行異常處理,以確保程序的正常執行。

          需要注意的是,上述注意事項基于使用InternetExplorer對象進行網頁操作的前提。如果使用其他方法或庫來進行網頁操作,注意事項可能會有所不同。在實際應用中,應根據具體情況進行適當的調整和驗證。

          、BeautifulSoup簡介

          BeautifulSoup是Python爬蟲應用解析Html的利器,是Python三方模塊bs4中提供的進行HTML解析的類,可以認為是一個HTML解析工具箱,對HTML報文中的標簽具有比較好的容錯識別功能。lxml是一款html文本解析器,BeautifulSoup構建對象時需要指定HTML解析器,推薦使用lxml。

          BeautifulSoup和lxml安裝命令:

          1.pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4

          2.pip install -i https://pypi.tuna.tsinghua.edu.cn/simple lxml

          加載BeautifulSoup

          1.from bs4 import BeautifulSoup

          BeatifulSoap解析HTML報文的常用功能

          1. 通過BeautifulSoup對象可以訪問標簽對應的html元素、并進一步訪問標簽的名字、屬性、html元素標簽對中的內容。
            案例from bs4 import BeautifulSoup
          2. import urllib.request
          3. def getURLinf(url):
          4. header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'}
          5. req = urllib.request.Request(url=url,headers=header)
          6. resp = urllib.request.urlopen(req,timeout=5)
          7. html = resp.read().decode()

          8. soup = BeautifulSoup(html,'lxml')
          9. return (soup,req,resp)

          10. soup,req ,resp = getURLinf
          11. print(soup.p)
          12. print(soup.link)
          13. print(soup.title)
          14. print(soup.link.attrs)
          15. print(soup.link['rel'])

          通過標簽的contents屬性,可以訪問其下嵌套的所有下級HTML元素,這些該標簽下的子標簽對應的HTML元素放到一個contents 指向的列表中。

          如:print(soup.body.contents)

          可以訪問標簽對應的父、子、兄弟及祖先標簽信息;

          使用strings屬性迭代訪問除標簽外的所有內容;

          可以使用find、find_all、find_parent、find_parents等系列方法查找滿足特定條件的標簽;

          使用select通過css選擇器定位特定標簽。


          二、一些解析技巧

          在HTML解析時,如果通過簡單的tag、或單個tag屬性(如id、class)或文本一次搜索或select定位是最簡單的,而有些情況需要使用組合方法才能處理。

          2.1、通過標簽的多個屬性組合定位或查找

          經常有些要定位的標簽有很多,按單個屬性查找也有很多,得使用多個屬性查找。如:

          上面的html文本中有多個id為article_content的div標簽,如果使用:

          1. >>> text="""```html
          2. <div id="article_content" class="article_content clearfix">
          3. ......
          4. </div>
          5. <div id="article_content" class="article_view">
          6. ......
          7. </div>
          8. <div id="article_view" class="article_view">
          9. ......
          10. </div>"""
          11. >>> s = BeautifulSoup(text,'lxml')
          12. >>> s.select('div#article_content')
          13. [<div class="article_content clearfix" id="article_content">......</div>,
          14. <div class="article_view" id="article_content">......</div>]
          15. >>>


          就會返回兩條記錄。這時候就可以使用多標簽屬性定位的如下4種語句:

          1. >>>s.select('div#article_content[class="article_content clearfix"]')
          2. [<div class="article_content clearfix" id="article_content">......</div>]
          3. >>>s.select('div[id="article_content"][class="article_content clearfix"]')
          4. [<div class="article_content clearfix" id="article_content">......</div>]
          5. >>>s.find_all("div",id="article_content",class_='article_content clearfix')
          6. [<div class="article_content clearfix" id="article_content">......</div>]
          7. >>>s.find_all("div","#article_content",class_='article_content clearfix')
          8. [<div class="article_content clearfix" id="article_content">......</div>]


          以上四種方式是等價的,因為id可以用#來標記,class在查找時需要和Python關鍵字class區分,因此有上述不同方法,注意select的每個屬性必須用中括號括起來,不同屬性的中括號之間不能有空格,如果有空格表示的就不是查找同一標簽的屬性,空格后的屬性表示前一個屬性對應標簽的子孫標簽的屬性。


          2.2、利用tag標簽關系定位內容

          tag標簽關系包括父子、兄弟、祖先等關系,有時要查找或定位的內容本身不是很好定位,但結合其他標簽關系(主要是父子、祖先關系)則可以唯一確認。

          案例:

          這是博文中關于博主個人信息的部分報文:

          1. <div class="data-info d-flex item-tiling">
          2. <dl class="text-center" title="1055">
          3. <a href=" " data-report-click='{"mod":"1598321000_001","spm":"1001.2101.3001.4310"}' data-report-query="t=1">
          4. <dt><span class="count">1055</span></dt>
          5. <dd class="font">原創</dd>
          6. </a>
          7. </dl>
          8. <dl class="text-center" data-report-click='{"mod":"1598321000_002","spm":"1001.2101.3001.4311"}' title="22">
          9. <a href=" " target="_blank">
          10. <dt><span class="count">22</span></dt>
          11. <dd class="font">周排名</dd>
          12. </a>
          13. </dl>
          14. </div>


          以上報文中,如果要取博主的原創文章數和周排名,原創文章數和博主周排名的tag標簽完全相同,二者都在span標簽內,標簽的屬性及值都相同,只是span標簽的父標簽dt標簽的兄弟標簽dd標簽的string的中文內容才能區分。對于這種情況,首先要通過祖先標簽<div class="data-info d-flex item-tiling">定位到祖先標簽,再在祖先標簽內通過中文字符串定位到要訪問屬性的兄弟標簽的子標簽,然后通過該子標簽找到其父標簽的父標簽,再通過該父標簽的dt子標簽的span子標簽訪問具體取值。

          示例代碼如下:

          1. >>> text="""
          2. <div class="data-info d-flex item-tiling">
          3. <dl class="text-center" title="1055">
          4. <a href=" " data-report-click='{"mod":"1598321000_001","spm":"1001.2101.3001.4310"}' data-report-query="t=1">
          5. <dt><span class="count">1055</span></dt>
          6. <dd class="font">原創</dd>
          7. </a>
          8. </dl>
          9. <dl class="text-center" data-report-click='{"mod":"1598321000_002","spm":"1001.2101.3001.4311"}' title="22">
          10. <a href=" " target="_blank">
          11. <dt><span class="count">22</span></dt>
          12. <dd class="font">周排名</dd>
          13. </a>
          14. </dl>
          15. </div>"""
          16. >>> s = BeautifulSoup(text,'lxml')
          17. >>> subSoup = s.select('[class="data-info d-flex item-tiling"] [class="font"]')
          18. >>> for item in subSoup:
          19. parent = item.parent
          20. if item.string=='原創':
          21. orignalNum = int(parent.select('.count')[0].string)
          22. elif item.string=='周排名':
          23. weekRank = int(parent.select('.count')[0].string)

          24. >>> print(orignalNum,weekRank)
          25. 1055 22
          26. >>>


          注意:上面的select使用的也是標簽的屬性來定位標簽,并且兩個中括號之間有空格,表明后一個要查找的標簽在前一個屬性對應標簽的子孫標簽范圍內。

          2.3、分析前去除程序代碼避免干擾

          在解析HTML報文時,絕大多數情況是需要分析有用的標簽信息,但作為技術文章,大部分的博文中都有代碼,這些代碼可能會對分析進行干擾。如本文中的代碼含有一些分析的HTML報文,如果獲取本文的完整HTML內容,這些報文在非代碼部分也會出現,此時要排除代碼的影響,可以將代碼先從分析內容中去除再來分析。

          目前大多數技術平臺的博文編輯器都支持對代碼的標識,象markdown等編輯器代碼的標簽為code標檢,如果有其他編輯器用不同標簽的,只有確認了標簽名,都可以按下面介紹的類似方式來處理。

          處理步驟如下:

          獲取報文;

          構建BeatifulSoap對象soup;

          通過soup.code.extract()或soup.code.decompose()方式就從soup對象中去除了代碼部分,decompose方法與extract方法的區別就是decompose直接刪除對應對象數據而extract再刪除時將刪除對象單獨返回。

          三、小結

          本文介紹了使用BeatifulSoap解析HTML報文的三個使用技巧,包括通過多屬性組合查找或定位標簽、通過結合多個標簽關系來定位標簽以及去除html報文中的代碼標簽來避免代碼對解析的影響。

          寫字不易,敬請支持:

          如果閱讀本文于您有所獲,敬請點贊、評論、收藏,謝謝大家的支持!

          ————————————————

          版權聲明:本文為轉載文章,如有侵權,請聯系作者刪除。


          主站蜘蛛池模板: 亚洲熟妇av一区| 亚洲高清毛片一区二区| 一区二区三区波多野结衣| 在线视频亚洲一区| 国产一区二区三区四| 上原亚衣一区二区在线观看| 中文国产成人精品久久一区| 精品一区二区三区免费毛片爱 | 日韩电影在线观看第一区| 国产精品一区二区久久沈樵| 国产精品电影一区| 激情久久av一区av二区av三区| 亚洲综合激情五月色一区| 国产激情一区二区三区成人91| 亚洲AV噜噜一区二区三区| 三上悠亚精品一区二区久久| 日亚毛片免费乱码不卡一区 | 久久99久久无码毛片一区二区| 亚洲狠狠久久综合一区77777| 国产亚洲综合一区二区三区| 国产精品视频分类一区| 无码人妻精品一区二区| 日韩精品无码Av一区二区| 亚洲高清一区二区三区电影| 少妇无码一区二区二三区| 久久亚洲中文字幕精品一区四 | 精品国产一区二区三区免费看| 精品亚洲一区二区| 亚洲国产精品无码久久一区二区| 福利视频一区二区牛牛| 日韩一区二区三区在线精品 | 国产精品合集一区二区三区 | 无码一区二区三区视频| 精品福利一区二区三| 国产麻豆精品一区二区三区v视界 国产美女精品一区二区三区 | 亚洲福利视频一区| 亚洲不卡av不卡一区二区| 精品国产福利在线观看一区| 亚洲一区二区三区深夜天堂| 99久久精品国产高清一区二区| 福利片福利一区二区三区|