整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          如何解析html標(biāo)簽內(nèi)容?手寫正則表達(dá)式?htmlparser模塊幫你解決

          篇文章給大家介紹一個(gè)解析html內(nèi)容的模塊——htmlparser。

          舉一個(gè)簡單的應(yīng)用場景:假設(shè)有一天領(lǐng)導(dǎo)需要你收集一下線上頁面已存在的靜態(tài)資源鏈接(js、css、img),你們的頁面很多,而且每個(gè)頁面的代碼量很大(比如上萬行),這種情況下你總不能人肉去搜索,那么此時(shí)htmlparser這個(gè)模塊就可以派上用場了。

          簡單使用

          安裝命令

          npm install htmlparser

          圖1

          圖1中我們使用htmlparser模塊解析一個(gè)i.html文件,其內(nèi)容如下:

          圖2

          解析結(jié)果如下:

          圖3

          圖3所示是個(gè)對象(此處序列化了便于顯示),遍歷這個(gè)對象就可以解決本文開頭所說的問題,這個(gè)模塊的用法非常的簡單。

          原理分析

          回到圖1,htmlparser模塊給我提供了一個(gè)Parser構(gòu)造函數(shù),這個(gè)構(gòu)造函數(shù)是初始化的入口!它大概長這個(gè)樣子:

          function Parser(handler) {
             this._handler = handler;
          }

          Parser接受一個(gè)參數(shù)handler,這個(gè)handler必須是一個(gè)對象,這個(gè)對象必須定義以下幾個(gè)方法:

          • reset方法主要做一些重置工作;
          • done方法完成解析后調(diào)用,此處可以執(zhí)行自定義回調(diào)函數(shù);
          • writeTag方法處理tag標(biāo)簽;
          • writeText方法處理純文本信息
          • writeComment方法處理注釋信息;
          • writeDirective方法處理<!...>這樣的標(biāo)簽信息,比如<!DOCTYPE html>。

          圖1中我們使用的是模塊內(nèi)部提供的DefaultHandler,我們當(dāng)然也可以自己定義handler。用別人的handler有時(shí)并不能完全滿足自己的業(yè)務(wù)場景,那么我們操作一把,代碼如下:

          圖4

          圖4中我們自定義一個(gè)handler——CustomHandler,我們先運(yùn)行一下看看各個(gè)方法都輸出了什么?

          圖5

          圖5中CustomHandler的各個(gè)方法按照原始字符串的順序依次打印出了每個(gè)解析結(jié)果,這些解析結(jié)果是parser對象為我們自動(dòng)生成的,解析的原理就是正則匹配。我們可以在自定義handler的各個(gè)函數(shù)方法中做一些特殊處理,然后把最終的結(jié)果通過done函數(shù)輸出出去。

          圖4中的parseComplete方法也可以用以下邏輯代替,

          parser.reset();
          parser.parseChunk(html);
          parser.done();

          這個(gè)模塊除了可以在node環(huán)境中使用,它同時(shí)也可以在瀏覽器中使用,用法如下:

          圖6

          圖7

          注意,如果在瀏覽器中使用,模塊的所有API都掛在了Tautologistics.NodeHtmlParser這個(gè)對象上,其它用法一致。

          總結(jié)

          需要我們?nèi)ソ馕鰄tml內(nèi)容的場景非常多,之前我們更多的是使用自己寫的正則表達(dá)式去做,麻煩并且容易出錯(cuò)。現(xiàn)在我們了解了htmlparser模塊,以后就可以直接使用它去解決問題。

          帶有項(xiàng)目和描述的描述列表:

          <dl>

          <dt>Coffee</dt>

          <dd>Black hot drink</dd>

          <dt>Milk</dt>

          <dd>White cold drink</dd>

          </dl>


          瀏覽器支持

          所有主流瀏覽器都支持 <dd> 標(biāo)簽。


          標(biāo)簽定義及使用說明

          <dd> 標(biāo)簽被用來對一個(gè)描述列表中的項(xiàng)目/名字進(jìn)行描述。

          <dd> 標(biāo)簽與 <dl> (定義一個(gè)描述列表)和 <dt> (定義項(xiàng)目/名字)一起使用。

          在 <dd> 標(biāo)簽內(nèi),您能放置段落、換行、圖片、鏈接、列表等等。


          HTML 4.01 與 HTML5之間的差異

          在 HTML 4.01 中,<dd> 標(biāo)簽被用來描述一個(gè)定義列表中的條目。

          在 HTML5 中,<dd> 標(biāo)簽被用來描述一個(gè)描述列表的項(xiàng)目/名字。


          全局屬性

          <dd> 標(biāo)簽支持 HTML 的全局屬性。


          事件屬性

          <dd> 標(biāo)簽支持 HTML 的事件屬性。

          如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!

          天查Html手冊時(shí),又有了新的發(fā)現(xiàn)。也就這機(jī)會,好好總結(jié)下HTML中Meta的使用。

            HTML <meta> 標(biāo)簽,所有瀏覽器都支持 <meta> 標(biāo)簽。它提供關(guān)于HTML文檔的元數(shù)據(jù)。元數(shù)據(jù)不會顯示在頁面上,但是對于機(jī)器是可讀的。它可用于瀏覽器(如何顯示內(nèi)容或重新加載頁面),對搜索引擎和更新頻度的描述和關(guān)鍵詞,或其他 web 服務(wù)。

            <meta> 標(biāo)簽位于文檔的頭部,不包含任何內(nèi)容。<meta> 標(biāo)簽的屬性定義了與文檔相關(guān)聯(lián)的名稱/值對。

            在 HTML 中,<meta> 標(biāo)簽沒有結(jié)束標(biāo)簽,在 XHTML 中,<meta> 標(biāo)簽必須被正確地關(guān)閉。

          必要屬性

          屬性值描述contentsome text定義與http-equiv或name屬性相關(guān)的元信息

          可選屬性

          屬性值描述http-equivcontent-type / expire / refresh / set-cookie把content屬性關(guān)聯(lián)到HTTP頭部。nameauthor / description / keywords / generator / revised / others把 content 屬性關(guān)聯(lián)到一個(gè)名稱。contentsome text定義用于翻譯 content 屬性值的格式。

          • SEO優(yōu)化

              關(guān)鍵詞:類似這樣的 meta 標(biāo)簽可能對于進(jìn)入搜索引擎的索引有幫助.使用人們可能會搜索,并準(zhǔn)確描述網(wǎng)頁上所提供信息的描述性和代表性關(guān)鍵字及短語。標(biāo)記內(nèi)容太短,則搜索引擎可能不會認(rèn)為這些內(nèi)容相關(guān),標(biāo)記不應(yīng)超過 874 個(gè)字符。

              <meta name="keywords" content="HTML,ASP,PHP,SQL">

              頁面描述,每個(gè)網(wǎng)頁都應(yīng)有一個(gè)不超過 150 個(gè)字符且能準(zhǔn)確反映網(wǎng)頁內(nèi)容的描述標(biāo)簽

            <meta name="description" content="your description">

              搜索引擎索引方式,robotterms是一組使用逗號(,)分割的值,通常有如下幾種取值:none,noindex,nofollow,all,index和follow。確保正確使用nofollow和noindex屬性值。

            

          <meta name="robots" content="index,follow" />
          <!--
          all:文件將被檢索,且頁面上的鏈接可以被查詢;
          none:文件將不被檢索,且頁面上的鏈接不可以被查詢;
          index:文件將被檢索;
          follow:頁面上的鏈接可以被查詢;
          noindex:文件將不被檢索;
          nofollow:頁面上的鏈接不可以被查詢。
          -->

            頁面重定向和刷新:content內(nèi)的數(shù)字代表時(shí)間(秒),既多少時(shí)間后刷新。如果加url,則會重定向到指定網(wǎng)頁(搜索引擎能夠自動(dòng)檢測,也很容易被引擎視作誤導(dǎo)而受到懲罰)。

            <meta http-equiv="Refresh" content="5;url=http://www.w3school.com.cn" /><!--5秒鐘后跳轉(zhuǎn)到http://www.w3school.com.cn-->

            <meta http-equiv="Refresh" content="5;" /><!--每5秒鐘刷新一下頁面-->

          • 移動(dòng)設(shè)備

             viewport:能優(yōu)化移動(dòng)瀏覽器的顯示。如果不是響應(yīng)式網(wǎng)站,不要使用initial-scale或者禁用縮放。大部分4.7-5寸設(shè)備的viewport寬設(shè)為360px;5.5寸設(shè)備設(shè)為400px;iphone6設(shè)為375px;ipone6 plus設(shè)為414px。很多人使用initial-scale=1到非響應(yīng)式網(wǎng)站上,這會讓網(wǎng)站以100%寬度渲染,用戶需要手動(dòng)移動(dòng)頁面或者縮放。如果和initial-scale=1同時(shí)使用user-scalable=no或maximum-scale=1,則用戶將不能放大/縮小網(wǎng)頁來看到全部的內(nèi)容。

                content 參數(shù):

                  width viewport 寬度(數(shù)值/device-width)
                  height viewport 高度(數(shù)值/device-height)
                  initial-scale 初始縮放比例
                  maximum-scale 最大縮放比例
                  minimum-scale 最小縮放比例
                  user-scalable 是否允許用戶縮放(yes/no)

            

          <meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0, user-scalable=no"/>
          <!-- `width=device-width` 會導(dǎo)致 iPhone 5 添加到主屏后以 WebApp 全屏模式打開頁面時(shí)出現(xiàn)黑邊 -->

            

            各瀏覽器平臺


            Microsoft Internet Explorer

          <!-- 優(yōu)先使用最新的ie版本 -->
          <meta http-equiv="x-ua-compatible" content="ie=edge">
          <!-- 是否開啟cleartype顯示效果 -->
          <meta http-equiv="cleartype" content="on">
          <meta name="skype_toolbar" content="skype_toolbar_parser_compatible">

          <!-- 關(guān)于X-UA-Compatible -->
          <meta http-equiv="X-UA-Compatible" content="IE=6" ><!-- 使用IE6 -->
          <meta http-equiv="X-UA-Compatible" content="IE=7" ><!-- 使用IE7 -->
          <meta http-equiv="X-UA-Compatible" content="IE=8" ><!-- 使用IE8 -->

          <!-- Pinned Site -->
          <!-- IE 10 / Windows 8 -->
          <meta name="msapplication-TileImage" content="pinned-tile-144.png">
          <meta name="msapplication-TileColor" content="#009900">
          <!-- IE 11 / Windows 9.1 -->
          <meta name="msapplication-config" content="ieconfig.xml">  

            Google Chrome

          <!-- 優(yōu)先使用最新的chrome版本 -->
          <meta http-equiv="X-UA-Compatible" content="chrome=1" />
          <!-- 禁止自動(dòng)翻譯 -->
          <meta name="google" value="notranslate"> 

            360瀏覽器

            <!-- 選擇使用的瀏覽器解析內(nèi)核 -->
          <meta name="renderer" content="webkit|ie-comp|ie-stand">

            UC手機(jī)瀏覽器

            <!-- 將屏幕鎖定在特定的方向 -->
          <meta name="screen-orientation" content="landscape/portrait">
          <!-- 全屏顯示頁面 -->
          <meta name="full-screen" content="yes">
          <!-- 強(qiáng)制圖片顯示,即使是"text mode" -->
          <meta name="imagemode" content="force">
          <!-- 應(yīng)用模式,默認(rèn)將全屏,禁止長按菜單,禁止手勢,標(biāo)準(zhǔn)排版,強(qiáng)制圖片顯示。 -->
          <meta name="browsermode" content="application">
          <!-- 禁止夜間模式顯示 -->
          <meta name="nightmode" content="disable">
          <!-- 使用適屏模式顯示 -->
          <meta name="layoutmode" content="fitscreen">
          <!-- 當(dāng)頁面有太多文字時(shí)禁止縮放 -->
          <meta name="wap-font-scale" content="no">

            QQ手機(jī)瀏覽器

          <!-- 鎖定屏幕在特定方向 -->
          <meta name="x5-orientation" content="landscape/portrait">
          <!-- 全屏顯示 -->
          <meta name="x5-fullscreen" content="true">
          <!-- 頁面將以應(yīng)用模式顯示 -->
          <meta name="x5-page-mode" content="app">

            Apple iOS

          <!-- Smart App Banner -->
          <meta name="apple-itunes-app" content="app-id=APP_ID,affiliate-data=AFFILIATE_ID,app-argument=SOME_TEXT">
          <!-- 禁止自動(dòng)探測并格式化手機(jī)號碼 -->
          <meta name="format-detection" content="telephone=no">
          <!-- Add to Home Screen添加到主屏 -->
          <!-- 是否啟用 WebApp 全屏模式 -->
          <meta name="apple-mobile-web-app-capable" content="yes">
          <!-- 設(shè)置狀態(tài)欄的背景顏色,只有在 “apple-mobile-web-app-capable” content=”yes” 時(shí)生效 -->
          <meta name="apple-mobile-web-app-status-bar-style" content="black">
          <!-- 添加到主屏后的標(biāo)題 -->
          <meta name="apple-mobile-web-app-title" content="App Title">

            Google Android

          <meta name="theme-color" content="#E64545">
          <!-- 添加到主屏 -->
          <meta name="mobile-web-app-capable" content="yes">
          <!-- More info: https://developer.chrome.com/multidevice/android/installtohomescreen -->
          App Links

          <!-- iOS -->
          <meta property="al:ios:url" content="applinks://docs">
          <meta property="al:ios:app_store_id" content="12345">
          <meta property="al:ios:app_name" content="App Links">
          <!-- Android -->
          <meta property="al:android:url" content="applinks://docs">
          <meta property="al:android:app_name" content="App Links">
          <meta property="al:android:package" content="org.applinks">
          <!-- Web Fallback -->
          <meta property="al:web:url" content="http://applinks.org/documentation">
          <!-- More info: http://applinks.org/documentation/ -->

            其它常用的meta

          <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
          <meta name="apple-mobile-web-app-capable" content="yes" />
          <meta name="apple-mobile-web-app-status-bar-style" content="black" />
          <meta name="format-detection"content="telephone=no, email=no" />
          <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
          <meta name="apple-mobile-web-app-capable" content="yes" /><!-- 刪除蘋果默認(rèn)的工具欄和菜單欄 -->
          <meta name="apple-mobile-web-app-status-bar-style" content="black" /><!-- 設(shè)置蘋果工具欄顏色 -->
          <meta name="format-detection" content="telphone=no, email=no" /><!-- 忽略頁面中的數(shù)字識別為電話,忽略email識別 -->
          <!-- 啟用360瀏覽器的極速模式(webkit) -->
          <meta name="renderer" content="webkit">
          <!-- 避免IE使用兼容模式 -->
          <meta http-equiv="X-UA-Compatible" content="IE=edge">
          <!-- 針對手持設(shè)備優(yōu)化,主要是針對一些老的不識別viewport的瀏覽器,比如黑莓 -->
          <meta name="HandheldFriendly" content="true">
          <!-- 微軟的老式瀏覽器 -->
          <meta name="MobileOptimized" content="320">
          <!-- uc強(qiáng)制豎屏 -->
          <meta name="screen-orientation" content="portrait">
          <!-- QQ強(qiáng)制豎屏 -->
          <meta name="x5-orientation" content="portrait">
          <!-- UC強(qiáng)制全屏 -->
          <meta name="full-screen" content="yes">
          <!-- QQ強(qiáng)制全屏 -->
          <meta name="x5-fullscreen" content="true">
          <!-- UC應(yīng)用模式 -->
          <meta name="browsermode" content="application">
          <!-- QQ應(yīng)用模式 -->
          <meta name="x5-page-mode" content="app">
          <!-- windows phone 點(diǎn)擊無高光 -->
          <meta name="msapplication-tap-highlight" content="no">
          <!-- 適應(yīng)移動(dòng)端end -->

          • 網(wǎng)頁相關(guān)

            網(wǎng)頁編碼:以下兩種charset定義方式均可


          <meta charset="utf-8">
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

            禁止緩存:禁止瀏覽器從本地機(jī)的緩存中調(diào)閱頁面內(nèi)容,網(wǎng)頁不保存在緩存中,每次訪問都刷新頁面。這樣設(shè)定,訪問者將無法脫機(jī)瀏覽

          <meta http-equiv="Pragma" content="no-cache">

            網(wǎng)頁過期:指定網(wǎng)頁在緩存中的過期時(shí)間,一旦網(wǎng)頁過期,必須到服務(wù)器上重新調(diào)閱。注意:必須使用GMT的時(shí)間格式,或直接設(shè)為0(數(shù)字表示多少時(shí)間后過期)

          <Meta http-equiv="Expires" Content="Wed, 26 Feb 1997 08:21:57 GMT">

            Cookie設(shè)置:注意:必須使用GMT的時(shí)間格式

          <Meta http-equiv="Set-Cookie" Content="cookievalue=xxx; expires=Wednesday,21-Oct-98 16:14:21 GMT; path=/">

            顯示窗口的設(shè)定:強(qiáng)制頁面在當(dāng)前窗口以獨(dú)立頁面顯示,這個(gè)屬性是用來防止別人在框架里調(diào)用你的頁面。Content選項(xiàng):_blank、_top、_self、_parent.

          <Meta http-equiv="Widow-target" Content="_top">

            進(jìn)入與退出:這個(gè)是頁面被載入和調(diào)出時(shí)的一些特效。這個(gè)有好多特效,可以查詢Page-Exit去了解更多。

            <Meta http-equiv="Page-Exit" Content="blendTrans(Duration=0.5)">

          • 安全相關(guān)

            內(nèi)容安全策略CSP(Content-Security-Policy),可以參考https://blog.csdn.net/u014465934/article/details/84199171

          <meta http-equiv="Content-Security-Policy" content="script-src 'self'">



          喜歡小編的可以點(diǎn)個(gè)贊關(guān)注小編哦,小編每天都會給大家分享文章。

          我自己是一名從事了多年的前端老程序員,小編為大家準(zhǔn)備了新出的前端編程學(xué)習(xí)資料,免費(fèi)分享給大家!

          如果你也想學(xué)習(xí)前端,可以觀看【置頂】文章。也可以私信【1】拿


          主站蜘蛛池模板: 日韩一区二区三区在线| 老熟妇仑乱视频一区二区| 一区二区免费视频| 日韩伦理一区二区| 亚洲一区二区在线视频| 日本人的色道www免费一区 | 国模吧无码一区二区三区| 国产精品高清一区二区人妖| 精品免费久久久久国产一区| 亚洲国产精品无码第一区二区三区| 日本道免费精品一区二区| 日韩人妻无码免费视频一区二区三区 | 伊人色综合网一区二区三区| 久久久不卡国产精品一区二区| 午夜视频在线观看一区| 国产精品视频一区二区三区| 国产综合精品一区二区三区| 精品久久国产一区二区三区香蕉| 国产在线第一区二区三区| 精品无码人妻一区二区三区品| 亚洲色精品aⅴ一区区三区 | а天堂中文最新一区二区三区| 国产福利日本一区二区三区| 精品福利视频一区二区三区| 久久国产一区二区三区| 成人乱码一区二区三区av| 国产精品无码一区二区三区在| 无码中文字幕乱码一区| 亚洲一区精彩视频| 国产精品制服丝袜一区| 69久久精品无码一区二区| 亚洲区精品久久一区二区三区| 国产成人一区二区三区在线观看| 黑人大战亚洲人精品一区| 国产成人无码AV一区二区| 国产av天堂一区二区三区| 国产亚洲日韩一区二区三区| 成人免费区一区二区三区| 日韩精品一区二区三区四区| 日本一区二区不卡在线| 一区高清大胆人体|