整合營銷服務商

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

          免費咨詢熱線:

          利用IE法提取網頁數據基礎

          #34;VBA信息獲取與處理"教程中第八個專題"VBA與HTML文檔"的第七節"HTML DOM的對象事件及關聯"太枯燥了,希望想掌握這方面知識的朋友能參考我的教程學習。我們今天 開始第九個專題的學習"利用IE抓取網絡數據"。

          我們的網抓部分在講解了XMLHTTP方法后,利用兩個專題的進度進行了一些和VBA關系不是很大的有關網絡知識的講解,這兩個專題對于我們重新認識網抓數據有著非常重要的意義,雖然我的講解還不能面面俱到,但對于我經常倡導的VBA定位來說,是足夠的,再者,學習是個不斷積累前進的過程,要掌握的是一些基本的理論,然后把這些應用到自己的實際中去,這才是關鍵。從這個專題開始我們繼續網抓的學習。這個專題是利用IE抓取網絡數據。其實就是利用控件來完成我們的工作。


          第一節 利用IE法提取網頁數據基礎

          為了獲取網頁的數據,我們可以通過創建IE控件或webbrowser控件,結合htmlfile對象的方法和屬性,模擬瀏覽器操作,獲取瀏覽器頁面的數據。

          這種方法可以模擬大部分的瀏覽器操作。瀏覽器能看到的數據就能用代碼獲取,但是有個致命的缺點:除去各種彈窗相當煩人外,兼容性也確實是個很傷腦筋的問題。在我自己的實踐中感覺這種方法不是很穩定(僅僅是感覺)。

          1 IE模型的創建

          我們在實際工作中遇到網站和網頁相關問題,例如:如何下載網頁數據?網頁之間的通訊是怎么實現的、它們能不能被控制等等。如果你是用VB/VBA/腳本或其它支持自動化對象(AUTOMATION)的語言編程,有一個值得了解的方法是掌握對象模型:將網頁視為對象來控制,這個方法需要了解的是IE的自動化對象(InternetExplorer.Application)或IE控件(Microsoft Internet Controls),以及標準的文檔對象模型(Document)。相關的知識我在前兩個專題中做了大量的講解,這里就不再詳細的說明了。

          我給出下面的代碼:

          Set ie = CreateObject("InternetExplorer.Application") '創建對象

          ie.Visible = True '使IE頁面可見,做完這一步,在VBA之外可以看到一個新的IE

          ie.navigate "about:blank" '建立一個空白頁

          上面這幾行代碼的作用是創建一個IE應用程序對象,并打開一個空白的網頁。這個網頁獨立于VBA的應用程序(WORD或EXCEL)之外,事實上,你必須自已關掉它,或者用ie.Quit下令退出——注意一下,單純的關閉VBA或SET ie=nothing是不會退出這個網頁的。我們經常用的是將第3行的字符串替換成一個網站的名字,或者替換成一個你主機中的文檔名,也可以是一個圖片名,都是可以的。和你在IE地址欄輸入名稱瀏覽這些文檔是一樣效果。

          如果僅僅是創建了一個空的模型是沒有任何利用的價值的,我們需要真正的網頁,這時就需要我們在VBA的應用程序外打開一個完整的網頁了,直到網頁完全加載我們的操作才能向下進行。

          2 IE網頁頁面的加載

          我們修正一下上面的那段打開空網頁的代碼:

          Sub mynz()

          Set ie = CreateObject("InternetExplorer.Application") '創建對象

          ie.Visible = True '使IE頁面可見,做完這一步,在VBA之外可以看到一個新的IE

          ie.navigate " https://baijiahao.baidu.com" '建立一個空白頁

          Do Until .ReadyState = 4 '檢查網頁是否加載完畢(4表示完全加載)

          DoEvents '循環中交回工作權限給系統,以免"軟死機"

          Loop

          End sub

          在上面的代碼中增加了幾行:

          Do Until .ReadyState = 4 '檢查網頁是否加載完畢(4表示完全加載)

          DoEvents '循環中交回工作權限給系統,以免"軟死機"

          Loop

          這幾行代碼可以保證網頁的加載完成,這是根據ie.ReadyState的返回值來判斷的。


          readyState一共有5中狀態:

          狀態 含義 說明

          0 未初始化 對象已建立,但是尚未初始化(尚未調用open方法)

          1 初始化 對象已建立,尚未調用send方法

          2 發送數據 send()方法已調用,但是當前的狀態及http頭未知

          3 數據傳送中 已接收部分數據,因為響應及http頭不全,這時通過responseBody和responseText獲取部分數據會出現錯誤

          4 數據接收完畢 此時可以通過通過responseBody和responseText獲取完整的回應數據


          通過以上的分析,我們可以看出,只用當.ReadyState = 4時網頁的數據才是有效的數據。

          3 IE頁面數據的獲得

          當網頁加載完畢,剩下的工作就是從網頁中抓取數據了,數據的抓取主要是利用控件對象的屬性和方法。


          1)用Set doc = ie.Document 取得網頁的文檔對象

          從文檔對象(Document)以下展開的對象模型,它代表網頁的內容,和前面那個IE的應用程序不是同一個體系.

          Documnet(文檔)是文檔對象模型,相當于OFFICE對象中的APPLICATION,取得Document之后,不論修改網頁還是讀寫網頁,還是觸發事件,一切都好說,每個URL都對應有一個Documnet(這是假如定成功導航Navigate到那個URL完成,因此之前要求確定IE對象READSTATE,以確定對應URL的Document打開了)


          2) 在Documnet之下可以取得documentElement和body兩個節點。


          可以用下面的語句:

          set xbody=doc.Body '取得body對象

          set xDoc=doc. documentElement '取得根節點

          body前面已經說過,相當于標記的對象,根節點相當于網頁中的標記元素的對象,MHTML的類型庫定義里,它們都屬于HTMLHtmlElement類型的對象,下面我把這種類型的對象稱為一個"節點",不過要注意的是文檔對象不是節點對象,它是HTMLDocument類型。根節點和body節點不同的是根節點包括整個網頁,在HTML的文檔對象模型中,這類對象有幾種屬性可以取得其中的內容:

          對象.innerHtml '對象內部的HTML文本

          對象.OuterHtml '對象中的HTML文本,包括對象本身的HTML標記在內

          對象.innerText '對象內部的TEXT,不包括HTML標記

          對象.OuterText '同上,包括對象本身的文本

          所以,如果我們要抓取某個網站的所有HTML內容,代碼可以這樣寫:

          set doc=ie.Document

          set xDoc=doc. documentElement '取得根節點

          strX=xDoc.OuterHtml '取得所有的HTML內容


          3) 每一個標記節點對象之下都有一個名為ChildNodes的集合,它包含了"直屬于本節點下的標記",就象是文件目錄,根目錄下的子目錄.

          我們可以看到:HTML標記是文檔的根節點,是Document的Childnodes集合中的一個成員(Document不是節點,是另一種類型對象,上一級文檔,但它可以有下級節點集合,正如磁盤可以有下級目錄,但它本身不是目錄),BODY是根節點的ChildNodes集合中的一個成員,而DIV和P兩個節點則是BODY的ChildNodes集合中的兩個成員,同樣也有自已的Childnoes集合。

          我們要注意:文檔對象模型中,集合與OFFICE的集合有所不同,集合是從0開始計數的,計數屬性是Length而不是Count。


          4)除了ChildNodes集合,大家在網頁文檔對象中還常見到的就是很大氣的一種集合:All集合,這是"最糊涂"的一種集合,文檔和各級節點都帶有這個集合,正如這個名字所示,它是不分層次的,但用起來也很方便:

          Set doc=ie.Document

          Set xCols=doc.All '取得文檔中的所有節點集合

          Set xbCols=doc.body.All '取得body節點下所有的節點集合

          雖然任何標記節點都有ALL集合,但我們還是喜歡用DOCUMENT的ALL,原因無它,文檔最大,一鍋燴的ALL找起來也最合適。ALL查找是有條件的:如果這個標記沒有ID,你無法查到它的名字。


          不過,ALL集合有一個很方便的特性:ID可以掛到ALL集合之下:

          strX=doc.All.mytag.innerhtml


          5)獲得文檔對象的getElementsByName集合,可以利用下面的方法:

          set mydivs=doc. getElementsByName("div") '取得所有DIV標記,注意還是集合


          6) 文檔對象的FORMS集合,因為大部分網頁的數據提交都是通過FORM標記提交的:

          Set myForms=doc.Forms '取得所有的FORM標記

          Set frmX=myForms.item(0) '第1個FORM

          FORM標記節點代表的對象是很多朋友關心的內容——在網頁對象中,它可以發送數據到服務器,使服務器刷新網頁(實際上是服務器按某個格式約定發回數據),我們可以把網頁的FORM看成是一個遠程的函數調用接口,FORM標記中的ACTION指向的URL地址就是函數入口,而FORM標記內的各個INPUT標記節點就是函數的參數,當發出FORM.Submit方法時,就是遠程調用函數了,在服務器端,諸如ASP,PHP就是老老實實找FORM的參數,不管你是用GET還是POST:

          frmX.submit '相當于用戶在頁面上按下FORM的發送按鍵


          上面我羅列了獲取網頁數據的一般的方法,并沒有什么特別的使用要求,大家可以根據自己的習慣來利用,這個專題之后的內容就是靈活運用這些知識點來解決實際問題了。



          本節知識點回向:


          如何提交表單?如何下載圖片的地址?如何獲得表的數據?


          積木編程的思路內涵:

          在我的系列書籍中一直在強調"搭積木"的編程思路,這也是學習利用VBA的主要方法,特別是職場人員,更是要采用這種方案。其主要的內涵:

          1 代碼不要自己全部的錄入。你要做的是把積木放在合適的位置然后去修正代碼,一定要拷貝,從你的積木庫中去拷貝,然后修正代碼,把時間利用到高效的思考上。

          2 建立自己的"積木庫"。平時在學習過程中,把自己認為有用的代碼放在一起,多積累,在用到的時候,可以隨時拿來。你的積木庫資料越多,你做程序的思路就會越廣。

          VBA的應用界定

          VBA是利用Office實現個人小型辦公自動化的有效手段(工具)。這是我對VBA的應用界定。在取代OFFICE新的辦公軟件沒有到來之前,誰能在數據處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!

          我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重復我之前的經歷,我根據自己多年VBA實際利用經驗,推出了六部VBA專門教程:

          第一套:VBA代碼解決方案 是VBA中各個知識點的講解,教程共147講,覆蓋絕大多數的VBA知識點,初學必備;

          第二套:VBA數據庫解決方案 數據庫是數據處理的專業利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,適合中級人員的學習。

          第三套:VBA數組與字典解決方案 數組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學習,是初級及中級人員代碼精進的手段。

          第四套:VBA代碼解決方案之視頻 是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。這套教程是第一套教程的視頻講解,聽元音更易接受。

          第五套:VBA中類的解讀和利用 這是一部高級教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。這套教程的領會主要是讀者的領悟了,領悟一種佛學的哲理。

          第六套教程:《VBA信息獲取與處理》是一部高級教程,涉及范圍更廣,實用性更強,面向中高級人員。教程共二十個專題,包括:跨應用程序信息獲得、隨機信息的利用、電子郵件的發送、VBA互聯網數據抓取、VBA延時操作,剪切板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定制工作表信息函數等等內容。

          大家可以根據以上資料1→3→2→6→5或者是4→3→2→6→5的順序逐漸深入的逐漸學習。教程提供講解的同時提供了大量的積木,如需要可以WeChat: NZ9668


          學習VBA是個過程,也需要經歷一種枯燥的感覺

          如太白詩云:眾鳥高飛盡,孤云獨去閑。相看兩不厭,只有敬亭山。學習的過程也是修心的過程,修一個平靜的心。在代碼的世界中,心平靜了,心情好了,身體自然而然就好。心靜則正,內心里沒有那么多邪知邪見,也就沒有那么多妄想。利人就是利己。這些教程也是為幫助大家起航,助上我自己之力,我的上述教程是我多的經驗的傳遞,

          "水善利萬物而不爭",綿綿密密,微則無聲,巨則洶涌。學習亦如此,知道什么是自己所需要的,不要蜷縮在一小塊自認為天堂的世界里,待到暮年時再去做自欺欺人的言論。要努力提高自己,用一顆充滿生機的心靈,把握現在,這才是進取。越是有意義的事情,困難會越多。愿力決定始終,智慧決定成敗。不管遇到什么,都是風景。看淡紛爭,看輕得失。茶,滿也好,少也好,不要計較;濃也好,淡也好,其中自有值得品的味道。去感悟真實的時間,靜下心,多學習,積累福報。而不是天天混日子,也不是天天熬日子。在后疫情更加嚴峻的存量殘殺世界中,為自己的生存進行知識的儲備,特別是新知識的儲備。學習時微而無聲,利用時則巨則洶涌。

          每一分收獲都是成長的記錄,怎無憑,正是這種執著,成就了朝霞的燦爛。最后將一闕詞送給致力于VBA學習的朋友,讓大家感受一下學習過程的枯燥與執著:


          浮云掠過,暗語無聲,

          唯有清風,驚了夢中啼鶯。

          望星,疏移北斗,

          奈將往事雁同行。

          阡陌人,昏燈明暗,

          忍顧長亭。

          多少VBA人,

          暗夜中,悄聲尋夢,盼卻天明。

          怎無憑!


          回向學習利用VBA的歷歷往事,不勝感慨,謹以這些文字給大家,分享我多年工作實際經驗的成果,隨喜這些有用的東西,給確實需要利用VBA的同路人。


          分享成果,隨喜正能量

          文深入探討如何運用PHP高效獲取網頁HTML元素信息。

          運用文件讀取函數,獲取網頁數據。

          利用PHP腳本的強大功能,網頁數據的采集中極為便捷,各類網頁元素亦可轉化為字符形式線上展現。

          2.使用正則表達式匹配目標元素

          面對諸多網頁需求,巧妙運用正則表達式可以精準且迅速搜尋并提取所需的HTML元素。核心技術在于結合正則表達式與網頁數據,以實現精確篩選及獲取這些元素的目的。

          3.使用DOMDocument類解析網頁

          借助 DOMDocument 類,PHP 為我們提供了深入分析和處理網頁的途徑。該類功能強大且易用,尤其以其精準讀取 HTML 文檔樹及其靈活操作的表現,在準確獲取所需元素方面具有顯著優勢。

          4.使用Simple HTML DOM庫

          對于正則表達式和DOMDocument類的初學者而言,可能會遭遇困難。為提升工作效率,可嘗試借助于諸如Simple HTML DOM這類第三方工具。該工具能準確挖掘所需HTML元素,大幅縮減項目開發時間。

          5.使用XPath查詢語言

          憑借其卓越性能,XPath在應對XML及HTML文檔元素抽取任務中表現非凡,為我們提供了對HTML元素的精準與靈動操縱。

          6.使用cURL庫發送HTTP請求

          借助PHP中cURL庫的功能優勢,我們能夠精確滿足各種網絡頁面內容獲取和模擬仿真的需求,從而突出頁面關鍵信息的精度提取。

          7.處理JavaScript生成的內容

          針對個性化需求,運用JavaScript也可實現網站內容的動態生產。為高效達成此目的,我們能依賴于PHP所提供的兩種無頭瀏覽器工具包——Selenium以及PhantomJS。

          8.處理AJAX請求返回的數據

          為了實現在網頁間的數據交互和溝通,尤其是借助AJAX技術模擬網絡傳輸和數據獲取過程的各項操作,我們會充分利用PHP中獨有的CURL模塊和眾多第三方廠商開發的高效能庫,它們將會成為你處理海量信息的強大后盾。

          9.使用API接口獲取數據

          若目標網站具備API訪問許可,那么僅需根據接口文檔所指定的請求參數,便可自動獲取并拆分JSON或者XML格式的回饋數據,進而達到信息交換的目標。

          10.注意事項和其他方法

          在獲取網頁中的HTML元素時,需要注意以下幾點:

          -確保目標網頁存在且可訪問;

          -遵守目標網站的使用規則和法律法規;

          -防止對目標網站造成過大的訪問壓力;

          -根據具體需求選擇合適的方法和工具。

          運用此策略,能精準提取所需HTML組件,為構建多樣化應用及特性提供強大后盾。盼望本文能對您在PHP開發過程中網頁元素搜尋有所裨益。

          HP作為一種強大的后端語言,被廣泛應用于網頁開發和數據處理。在網絡信息爆炸的時代,如何高效地采集文章成為了許多網站和應用所面臨的挑戰。本文將介紹如何利用PHP實現采集文章的最佳實踐,幫助讀者了解采集原理和技術要點。

          1.了解目標網站結構

          在進行文章采集之前,首先需要對目標網站的結構進行深入了解,包括頁面布局、數據存儲方式和反爬蟲機制等。

          2.使用合適的庫和工具

          PHP提供了許多優秀的第三方庫和工具,如Guzzle、Simple HTML DOM等,可以幫助我們更輕松地進行網頁請求和DOM操作。

          3.構建合理的請求策略

          在進行頁面請求時,需要考慮網站的反爬蟲機制,合理設置請求頭和代理IP等參數,避免被封禁。

          4.解析頁面結構與數據提取

          通過DOM解析技術,可以準確地提取出所需的文章內容、標題、作者、發布時間等信息。

          5.數據清洗與去重

          采集到的數據可能存在格式混亂或重復內容,需要進行清洗和去重處理,保證數據的準確性和完整性。

          6.自動化定時任務

          利用PHP的定時任務功能,可以實現自動化定時采集,并將采集結果持久化存儲到數據庫或文件中。

          7.處理異常情況

          在采集過程中可能會遇到網絡異常、頁面結構變化等問題,需要編寫健壯的代碼來處理這些異常情況。

          8.合規合法使用

          在進行文章采集時,需要遵守相關法律法規和網站規定,不得侵犯他人權益或違反網絡道德。

          9.數據存儲與管理

          采集到的文章數據需要進行有效地存儲管理,并確保數據安全和隱私保護。

          10.性能優化與擴展

          針對大規模數據采集需求,需要考慮性能優化和系統擴展問題,確保系統穩定可靠運行。

          11.監控與日志記錄

          建立完善的監控系統和日志記錄機制,及時發現并解決采集過程中出現的問題。

          12.反爬蟲對抗策略

          面對不斷升級的反爬蟲手段,需要不斷學習和調整采集策略,有效應對反爬蟲挑戰。

          13.面向未來發展

          隨著互聯網技術不斷發展變化,在實現文章采集過程中要注重未來發展趨勢,并靈活調整技術方案。

          14.合作共贏與社區分享

          在解決自身問題的同時也要關注社區共享精神,積極參與開源項目并分享自己的經驗與成果。


          主站蜘蛛池模板: 人妻少妇一区二区三区| 日韩高清国产一区在线| 无码人妻一区二区三区兔费| 亚洲色无码专区一区| 中文字幕一区二区三区四区| 精品一区二区在线观看| 亚洲AV无码一区二区一二区| 婷婷国产成人精品一区二| 亚洲日韩中文字幕无码一区| 国内精品无码一区二区三区| 国产一区二区在线|播放| 亚洲国产精品一区| 亚洲中文字幕无码一区二区三区| 日韩在线一区视频| 国产美女一区二区三区| 中文字幕一区视频| 精品亚洲一区二区| 国产在线一区二区三区| 精品视频在线观看你懂的一区| 在线电影一区二区三区| 久久精品日韩一区国产二区| 亚洲一区精彩视频| 亚洲精品精华液一区二区| 99久久无码一区人妻a黑| 射精专区一区二区朝鲜| 国产精品视频一区二区噜噜 | 无码人妻品一区二区三区精99| 精品福利一区二区三区精品国产第一国产综合精品 | 在线观看日韩一区| 免费萌白酱国产一区二区| 天堂成人一区二区三区| 精品日韩一区二区| 国产美女露脸口爆吞精一区二区| 波多野结衣在线观看一区 | 无码av不卡一区二区三区| 亚洲国产专区一区| 亚洲一区二区三区久久| 国产精品成人免费一区二区| 精品一区二区三区AV天堂| 红杏亚洲影院一区二区三区| 久久99精品波多结衣一区|