电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

基于python requests selenium爬取excel vba過程解析

瀏覽:2日期:2022-07-14 11:53:09

目的:基于辦公與互聯網隔離,自帶的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.textk[’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 datawith open(r’templetedata.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 = 1for 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='http://www.hdgsjgj.cn/bcjs/js/jquery.min.js'> </script></head><frameset rows='93%,7%'> <frameset cols='20%,80%' frameborder='yes' framespacing='1'> <frame src='http://www.hdgsjgj.cn/bcjs/menu.html' name='menuframe'/> <frame name='showframe' /> </frameset> <frameset frameborder='no' framespacing='1'> <frame src='http://www.hdgsjgj.cn/bcjs/a.html' /> </frameset></frameset></html>

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='http://www.hdgsjgj.cn/bcjs/js/jquery.min.js'></script> <link rel='stylesheet' href='http://www.hdgsjgj.cn/bcjs/themes/default/style.min.css' rel='external nofollow' /> <script src='http://www.hdgsjgj.cn/bcjs/js/jstree.min.js'></script> <script type='text/javascript' src='http://www.hdgsjgj.cn/bcjs/data.json'></script></head><body> <div> <form id='s'> <input type='search' /> <button type='submit'>Search</button> </form> <div id='container'> </div> <div id='container'></div> <script> $(function () {$(’#container’).jstree({ 'plugins': ['search', 'changed'], ’core’: { ’data’: data, }}); }); $(’#container’).on('changed.jstree', function (e, data) {//console.log(data.changed.selected.length); // newly selected//console.log(data.changed.deselected); // newly deselectedif (data.changed.selected.length > 0){ // 說明轉換了,獲取url var url = data.node.a_attr.href // console.log(url) if (url == '#'){ }else{ parent[data.node.a_attr.target].location.href = url }}else{} }) $('#s').submit(function (e) {e.preventDefault();$('#container').jstree(true).search($('#q').val()); }); </script> </div></body></html>

以上,得到最后的本地版網頁excel vba參考工具。最后,部分office自帶本地版的vba參考工具,有點白干一場。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: python
相關文章:
主站蜘蛛池模板: SMC-ASCO-CKD气缸-FESTO-MAC电磁阀-上海天筹自动化设备官网 | 全温度恒温培养摇床-大容量-立式-远红外二氧化碳培养箱|南荣百科 | 消防设施操作员考试报名时间,报名入口,报考条件 | 锌合金压铸-铝合金压铸厂-压铸模具-冷挤压-誉格精密压铸 | 耐压仪-高压耐压仪|徐吉电气 | 消防泵-XBD单级卧式/立式消防泵-上海塑泉泵阀(集团)有限公司 | 低浓度恒温恒湿称量系统,强光光照培养箱-上海三腾仪器有限公司 | 北京律师咨询_知名专业北京律师事务所_免费法律咨询 | 碳纤维布-植筋胶-灌缝胶-固特嘉加固材料公司 | 选矿设备,选矿生产线,选矿工艺,选矿技术-昆明昆重矿山机械 | 湖南印刷厂|长沙印刷公司|画册印刷|挂历印刷|台历印刷|杂志印刷-乐成印刷 | 彭世修脚_修脚加盟_彭世修脚加盟_彭世足疗加盟_足疗加盟连锁_彭世修脚技术培训_彭世足疗 | 球磨机,节能球磨机价格,水泥球磨机厂家,粉煤灰球磨机-吉宏机械制造有限公司 | 粉末包装机,拆包机厂家,价格-上海强牛包装机械设备有限公司 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 驾驶式洗地机/扫地机_全自动洗地机_工业洗地机_荣事达工厂官网 | 桁架机器人_桁架机械手_上下料机械手_数控车床机械手-苏州清智科技装备制造有限公司 | 叉车电池-叉车电瓶-叉车蓄电池-铅酸蓄电池-电动叉车蓄电池生产厂家 | 车件|铜件|车削件|车床加工|五金冲压件-PIN针,精密车件定制专业厂商【东莞品晔】 | 国际线缆连接网 - 连接器_线缆线束加工行业门户网站 | 生物制药洁净车间-GMP车间净化工程-食品净化厂房-杭州波涛净化设备工程有限公司 | 螺杆真空泵_耐腐蚀螺杆真空泵_水环真空泵_真空机组_烟台真空泵-烟台斯凯威真空 | 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 三价铬_环保铬_环保电镀_东莞共盈新材料贸易有限公司 | 安徽合肥格力空调专卖店_格力中央空调_格力空调总经销公司代理-皖格制冷设备 | 滚塑PE壳体-PE塑料浮球-警示PE浮筒-宁波君益塑业有限公司 | 乐泰胶水_loctite_乐泰胶_汉高乐泰授权(中国)总代理-鑫华良供应链 | 加气混凝土砌块设备,轻质砖设备,蒸养砖设备,新型墙体设备-河南省杜甫机械制造有限公司 | PTFE接头|聚四氟乙烯螺丝|阀门|薄膜|消解罐|聚四氟乙烯球-嘉兴市方圆氟塑制品有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 飞扬动力官网-广告公司管理软件,广告公司管理系统,喷绘写真条幅制作管理软件,广告公司ERP系统 | 南京租车,南京汽车租赁,南京包车,南京会议租车-南京七熹租车 | YJLV22铝芯铠装电缆-MYPTJ矿用高压橡套电缆-天津市电缆总厂 | 三板富 | 专注于新三板的第一垂直服务平台 | 蜗轮丝杆升降机-螺旋升降机-丝杠升降机厂家-润驰传动 | RS系列电阻器,RK_RJ启动调整电阻器,RQ_RZ电阻器-上海永上电器有限公司 | 百方网-百方电气网,电工电气行业专业的B2B电子商务平台 | 洁净棚-洁净工作棚-无菌室-净化工程公司_北京卫护科技有限公司 | 花纹铝板,合金铝卷板,阴极铝板-济南恒诚铝业有限公司 | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 电缆故障测试仪_电缆故障定位仪_探测仪_检测仪器_陕西意联电气厂家 |