目的:基于办公与互联网隔离,自带的office软件没有带本地帮助工具,因此在写vba程序时比较不方便(后来发现07有自带,心中吐血,瞎折腾些什么)。所以想到通过爬虫在官方摘录下来作为参考。
目标网站:https://docs.microsoft.com/zh-cn/office/vba/api/overview/
所使工具:
python3.7,requests、selenium库
前端方面:使用了jquery、jstree(用于方便的制作无限层级菜单
设计思路:
1、分析目标页面,可分出两部分,左边时导航,右边是内容显示。
2、通过selenium对导航条进行深度遍历,取得导航条所有节点以及对应的链接,并以jstree的数据格式存储。
# 导航层级为 <ul> <li> <a>... <span>....
3、使用requests遍历所有链接取得相应主体页面。
实现:
# # parent 上级节点 # wait_text 上级节点对应的xpath路径的文本项 # level,limit 仅方便测试使用 # def GetMenuDick_jstree(parent,level,wait_text,limit=2): if level >= limit: return [] parent.click() l = [] num = 1 new_wati_text = wait_text + '/following-sibling::ul' # 只需要等待ul出来就可以了/li[' + str(ele_num) + ']' try: wait.until(EC.presence_of_element_located((By.XPATH,new_wati_text))) # 查询子节点所有的 a节点和span节点(子菜单) childs = parent.find_elements_by_xpath('following-sibling::ul/li/span | following-sibling::ul/li/a') for i in childs: k = {} if i.get_attribute('role') == None: k['text'] = i.text # 如果是子菜单,进行深度遍历 k['children'] = GetMenuDick_jstree(i,level+1,new_wati_text + '/li[' + str(num) + ']/span',limit) else: # 网页访问的Url无Html后缀,需要加上。去除无相关地址,形成相对路径。 url_text = str(i.get_attribute('href')).replace('https://docs.microsoft.com/zh-cn/office/', '',1) + '.html' k['text'] = i.text k['a_attr'] = {"href":url_text,"target":"showframe"} lhref.append(str(i.get_attribute('href'))) num = num + 1 l.append(k) parent.click() # 最后收起来 except Exception as e: print('error message:',str(e),'error parent:' ,parent.text,' new_wati_text:',new_wati_text,'num:',str(num)) lerror.append(parent.text) finally: return l
# data菜单,lhref为后续需要访问的地址。 # 找到第一个excel节点,从excel开始 data = [] lhref = [] lerror = [] k = {} browser.get(start_url) browser.set_page_load_timeout(10) #超时设置 xpath_text = '//li[contains(@class,"tree")]/span[text()="Excel"][1]' cl = browser.find_element_by_xpath(xpath_text) k = {'text':'Excel'} k['children'] = GetMenuDick_jstree(cl,1,xpath_text,20) data.append(k) # Writing JSON data with open(r'templete\data.json', 'w', encoding='utf-8') as f: json.dump(data, f)
进行到这里,已经拥有了excel vba下所有的菜单信息以及对应的url。下来需要得到页面主体。
实现思路:
1、遍历所有url
2、通过url得到相应的文件名
# # 根据网页地址,得到文件名,并创建相应文件夹 # def create_file(url): t = 'https://docs.microsoft.com/zh-cn/office/' # 替换掉字眼,然后根据路径生成相应文件夹 url = url.replace(t,"",1) lname = url.split('/') # 先判断有没有第一个文件夹 path = lname[0] if not os.path.isdir(path): os.mkdir(path) for l in lname[1:-1]: path = path + '\\' + str(l) if not os.path.isdir(path): os.mkdir(path) if len(lname) > 1: path = path + '\\' + lname[-1] + '.html' return path
3、访问url得到主体信息储存。
# requests模式 # 循环遍历,如果错误,记录下来,以后再执行 had_lhref = [] error_lhref = [] num = 1 for url in lhref: try: had_lhref.append(url) path = create_file(url) resp = requests.get(url,timeout=5,headers = headers) # 设置访问超时,以及http头 resp.encoding = 'utf-8' html = etree.HTML(resp.text) c = html.xpath('//main[@id="main"]') # tostring获取标签所有html内容,是字节类型,要decode为字符串 content = html_head + etree.tostring(c[0], method='html').decode('utf-8') with open(path,'w', encoding='utf-8') as f: f.write(content) except Exception as e: print('error message:',str(e),'error url:',url) error_lhref.append(url) if num % 10 == 0 : print('done:',str(num) + '/' + str(len(lhref)),'error num:' + str(len(error_lhref))) #time.sleep(1) # 睡眠一下,防止被反 num = num + 1
现在,菜单信息与内容都有了,需要构建自己的主页,这里使用了jstree;2个html,index.html,menu.html。
index.html:使用frame页面框架,相对隔离。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <title>参考文档</title> <script src="/UploadFiles/2021-04-08/jquery.min.js">menu.html:
1、引入了data.json,这样在可以进行离线调用,使用ajax.get读取json的话,会提示跨域失败;
2、jstree会禁止<a>跳转事件,所有需要通过监听"change.tree"事件来进行跳转。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="/UploadFiles/2021-04-08/jquery.min.js">以上,得到最后的本地版网页excel vba参考工具。最后,部分office自带本地版的vba参考工具,有点白干一场。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】