整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

学会用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报文中的代码标签来避免代码对解析的影响。

写字不易,敬请支持:

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

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

版权声明:本文为转载文章,如有侵权,请联系作者删除。