整合營銷服務商

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

          免費咨詢熱線:

          JAVA獲取網頁文本內容

          JAVA獲取網頁文本內容

          要核心類就是:

          URLConnection

          代碼如下:

          public static String sendGet(String url, HashMap<String,String> requestHead) throws Exception {
           URL url1=new URL(url);
           URLConnection connection=url1.openConnection();
           connection.setRequestProperty("Accept","*/*");
           connection.setRequestProperty("Connection","Keep-Alive");
           if(requestHead==null){
           }else{
           for(String key:requestHead.keySet()){
           connection.setRequestProperty(key,requestHead.get(key));
           }
           }
           InputStream inputStream=connection.getInputStream();
           byte[] bytes=new byte[1024];
           ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
           int len=0;
           while((len=inputStream.read(bytes))!=-1){
           outputStream.write(bytes,0,len);
           }
           String ret=new String(outputStream.toByteArray());
           String charset=getWebCharset(ret);
           return new String(outputStream.toByteArray(),charset);
          }

          其中的getWebCharaset是自動匹配網頁編碼,代碼如下:

          public static String getWebCharset(String str){
           String charset="UTF";
           try{
           charset=TextUtil.getMiddleText(str,"charset=",">").substring(0,3);
           charset=charset.replaceAll("\"","");
           charset=charset.replaceAll("'","");
           }catch (NullPointerException e){
           }
           charset=charset.toUpperCase();
           if(charset.startsWith("UT")){
           charset="UTF8";
           }else if(charset.startsWith("GB2")){
           charset="GB2312";
           }else if(charset.startsWith("GBK")){
           charset="GBK";
           }
           return charset;
          }

          當然匹配的方式有很多種,可以自己實現。

          所周知,python最強大的地方在于,python社區匯總擁有豐富的第三方庫,開源的特性,使得有越來越多的技術開發者來完善。

          python的完美性。

          未來人工智能,大數據方向,區塊鏈的識別和進階都將以python為中心來展開。

          咳咳咳! 好像有點打廣告的嫌疑了。

          當前互聯網信息共享時代,最重要的是什么?是數據。最有價值的是什么?是數據。最能直觀體現技術水平的是什么?還是數據。

          所以,今天我們要分享的是:如何來獲取各個文件格式的文本信息。

          普通文件的格式 一般分為: txt普通文本信息,doc word文檔,html網頁內容,excel表格數據,以及特殊的mht文件。

          一、Python處理html網頁信息

          html類型的文本數據,內容是由前端代碼書寫的標簽+文本數據的格式,可以直接在chrome瀏覽器打開,清楚 的展示出文本的格式。

          python 獲取html文件的內容和獲取txt文件的方法相同,直接打開文件讀取就可以了。

          讀取代碼如下:

          with open(html_path, "r", encoding="utf-8") as f:
           file=f.read()
          

          file 是html文件的文本內容。是一個網頁標簽的格式內容。

          二、Python處理excel表格信息

          python擁有直接操作excel表格的第三方庫xlwt,xlrd。調用對應的方法就可以讀寫excel表格數據。

          讀取excel操作代碼如下:

          filepath="C:\\Users\Administrator\Desktop\新建文件夾\笨笨 前程6份 武漢.xls"
          sheet_name="UserList"
          rb=xlrd.open_workbook(filepath)
          sheet=rb.sheet_by_name(sheet_name)
          # clox_list=[0, 9, 14, 15, 17]
          for row in range(1, sheet.nrows):
           w=WriteToExcel()
           # for clox in clox_list:
           name=sheet.cell(row, 0).value
           phone=sheet.cell(row, 15).value
           address=sheet.cell(row, 9).value
           major=sheet.cell(row, 14).value
           age=sheet.cell(row, 8).value
          

          其中row是表格數據對應的行數, cell獲取具體行數,列數的具體數據。

          三、Python讀取doc文檔數據

          python讀取doc文檔是最麻煩的。處理邏輯復雜。處理的方式也有很多種。

          python 沒有直接處理doc文檔的第三方庫,但是有一個處理docx的第三方庫。可以通過將doc文件轉換為docx文件,再調用第三方python庫pydocx來讀取doc文檔的內容。

          這里需要注意的是,不要直接修改doc的后綴來修改成docx文件。直接通過修改后綴獲取的docx文件,pydocx無法讀取內容。

          我們可以使用另外一個庫來修改doc為docx。

          具體代碼如下:

          def doSaveAas(self, doc_path):
           """
           將doc文檔轉換為docx文檔
           :rtype: object
           """
           docx_path=doc_path.replace("doc", "docx")
           word=wc.Dispatch('Word.Application')
           doc=word.Documents.Open(doc_path) # 目標路徑下的文件
           doc.SaveAs(docx_path, 12, False, "", True, "", False, False, False, False) # 轉化后路徑下的文件
           doc.Close()
           word.Quit()
          

          代碼所需的包接口:

          import os
          import zipfile
          from win32com import client as wc
          import xlrd
          from bs4 import BeautifulSoup
          from pydocx import PyDocX
          from lxml import html
          from xpath_content import XpathContent
          from write_to_excel import WriteToExcel
          

          python處理docx文檔的方法有很多種,具體使用情況,根據個人需求來決定。

          No.1 解壓docx文件

          docx文件的原理,本質上就是一個壓縮的zip文件,通過解壓以后,就可以獲取原來文件的各個內容。

          docx解壓后的文件結構如下:



          docx文件的文本內容存儲結構如下:

          文本內容存儲于word/document.xml文件中。



          第一種方法,我們就可以先將docx還原成zip壓縮文件,再解壓zip文件,讀取word/document.xml文件的內容就ok了。

          具體操作代碼如下:

          def get_content(self):
           """
           獲取docx文檔的文本內容
           :rtype: object
           """
           os.chdir(r"C:\Users\Administrator\Desktop\新建文件夾") # 改變目錄到文件的目錄
           #
           os.rename("51 2014.09.12 1份Savannah.docx", "51 2014.09.12 1份Savannah.ZIP") # 重命名為zip文件
           f=zipfile.ZipFile('51 2014.09.12 1份Savannah.ZIP', 'r') # 進行解壓
           xml=f.read("word/document.xml")
           wordObj=BeautifulSoup(xml.decode("utf-8"))
           # print(wordObj)
           texts=wordObj.findAll("w:t")
           content=[]
           for text in texts:
           content.append(text.text)
           content_str="".join(content)
           return content_str
          

          最后獲取到的就是docx文檔的所有文本數據了。

          No.2 將docx文檔轉換成python能夠處理的文本格式

          第一種方法,是依據docx文檔的原理來獲取數據,流程有點繁瑣,有沒有能直接讀取docx文檔內容的方法呢?答案,肯定是沒有的,別想了,洗洗回家睡吧。

          直接讀取docx文檔的方法沒有,有沒有能夠將docx文檔轉換成python能夠輕松處理的文本格式呢?

          這個可以有,前面說了,python擁有大量豐富的第三方庫(先夸一波我大python),歷經千辛萬苦終于找到了,一個能轉換docx文檔格式的第三方庫,pydocx,pydocx庫中有個方法pydocx.to_html()就可以直接將docx文檔轉換為html文件,怎么樣?意不意外,驚喜不驚喜!

          第二種方法,轉換文本格式的代碼如下:

          def docx_to_html(self, docx_path):
           """
           docx文檔轉換成html響應
           :rtype: object
           """
           # docx_path="C:\\Users\Administrator\Desktop\新建文件夾\\51 2014.09.12 1份Savannah.docx"
           response=PyDocX.to_html(docx_path)
          

          獲取到的response是html文件內容。

          四、Python處理mht文件

          mht文件是一種只能在IE瀏覽器上展示的文本格式,在chrome瀏覽器中打開是一堆的亂碼。

          No.1 偽造IE請求mht文件內容

          最基礎的讀取mht文本的方法就是偽造IE瀏覽器請求。

          調用requests庫,發送get請求網頁鏈接,構造IE的請求頭信息。

          理論上來說,這種方法是可行的。但是呢,不建議用,原因大家都懂得。


          No.2 轉換文件格式

          好了說正經的方法,猜測mht文件能否修改成其他文件格式來直接讀取呢?

          docx,不行;html,不行;excel,更不用說了。

          真相只有一個!!!

          直接修改后綴得到的docx,無法讀取。

          so,我們想到的方法是什么呢。沒錯,就是修改成doc文檔。

          方法是匪夷所思的,但也是靈感一現。

          mht可以直接通過修改后綴轉換成doc文檔,doc文檔讀取文本內容的方法具體參考上面讀取doc文檔的方法。

          如何獲取html文本的內容?

          html文本的內容是網頁結構標簽數據,取出文本的方式是:re正則,或者xpath。

          后續,小伙伴有需要的話,會再開一章詳細了解re,xapth的使用規則。

          來源網絡,侵權聯系刪除

          #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是個過程,也需要經歷一種枯燥的感覺

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

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

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


          浮云掠過,暗語無聲,

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

          望星,疏移北斗,

          奈將往事雁同行。

          阡陌人,昏燈明暗,

          忍顧長亭。

          多少VBA人,

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

          怎無憑!


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


          分享成果,隨喜正能量


          主站蜘蛛池模板: 国产精品一区二区久久乐下载| 精品国产免费一区二区三区| 精品国产一区AV天美传媒| 日本国产一区二区三区在线观看 | 日韩一区在线视频| 国产福利电影一区二区三区,亚洲国模精品一区 | 亚洲欧洲精品一区二区三区| 亚洲一区二区三区电影| 久久精品无码一区二区app| 一区二区三区杨幂在线观看 | 国产精品一级香蕉一区| 中文无码AV一区二区三区| 亚洲AV成人精品日韩一区| 人妖在线精品一区二区三区| 真实国产乱子伦精品一区二区三区| 国产在线观看精品一区二区三区91| 精品无人区一区二区三区| 韩国福利影视一区二区三区| 一区二区三区亚洲| 黑巨人与欧美精品一区| 无码一区二区三区免费视频| 亚洲综合一区无码精品| 亚洲AV一区二区三区四区| 一级特黄性色生活片一区二区| 色欲AV蜜臀一区二区三区| 久久一本一区二区三区| 一区二区三区电影网| 69福利视频一区二区| 国产精品一区二区香蕉| 亚洲一区二区三区偷拍女厕| 色欲AV蜜臀一区二区三区| 国产麻豆媒一区一区二区三区| 色视频综合无码一区二区三区| 成人精品视频一区二区三区不卡 | 日本一区二区三区不卡视频| 亚洲一区二区三区四区在线观看| 国产一区二区三区四| 欲色aV无码一区二区人妻| 夜色福利一区二区三区| 国产精品特级毛片一区二区三区| 夜夜精品无码一区二区三区|