Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 欧美洲视频在线观看,julia一区二区三区中文字幕,日韩视频在线观看

          整合營銷服務(wù)商

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

          免費咨詢熱線:

          vite中獲取某指定的文件目錄

          vite中獲取某指定的文件目錄

          在某個文件中需要引用某個文件夾下的所有js文件。這種情況在使用webpack搭建的項目中使用下面的方法即可獲取到:

          const modules=require.context(
            './', // 在當(dāng)前目錄下查找
            true, // 遍歷子文件夾
            /\.js$/ // 正則匹配 以 .vue結(jié)尾的文件
          )

          但是,在使用vite搭建的vue3.x的項目里面是不能使用上面的這個方法的。因為require.context這個方法是由webpack所提供的,但vite并不提供這個方法。那該如何解決呢?

          解決

          vite的官方網(wǎng)站其實是給出了類似的功能方法的。可以使用其提供的Glob 導(dǎo)入(https://vitejs.cn/guide/features.html#glob-import),使用方法如下:

          // 指定包含的文件
          const modules=import.meta.glob('./dir/*.js')

          最后生成的效果:

          、BeautifulSoup簡介

          BeautifulSoup是Python爬蟲應(yīng)用解析Html的利器,是Python三方模塊bs4中提供的進行HTML解析的類,可以認(rèn)為是一個HTML解析工具箱,對HTML報文中的標(biāo)簽具有比較好的容錯識別功能。lxml是一款html文本解析器,BeautifulSoup構(gòu)建對象時需要指定HTML解析器,推薦使用lxml。

          BeautifulSoup和lxml安裝命令:

          1.pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4

          2.pip install -i https://pypi.tuna.tsinghua.edu.cn/simple lxml

          加載BeautifulSoup

          1.from bs4 import BeautifulSoup

          BeatifulSoap解析HTML報文的常用功能

          1. 通過BeautifulSoup對象可以訪問標(biāo)簽對應(yīng)的html元素、并進一步訪問標(biāo)簽的名字、屬性、html元素標(biāo)簽對中的內(nèi)容。
            案例from bs4 import BeautifulSoup
          2. import urllib.request
          3. def getURLinf(url):
          4. header={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'}
          5. req=urllib.request.Request(url=url,headers=header)
          6. resp=urllib.request.urlopen(req,timeout=5)
          7. html=resp.read().decode()

          8. soup=BeautifulSoup(html,'lxml')
          9. return (soup,req,resp)

          10. soup,req ,resp=getURLinf
          11. print(soup.p)
          12. print(soup.link)
          13. print(soup.title)
          14. print(soup.link.attrs)
          15. print(soup.link['rel'])

          通過標(biāo)簽的contents屬性,可以訪問其下嵌套的所有下級HTML元素,這些該標(biāo)簽下的子標(biāo)簽對應(yīng)的HTML元素放到一個contents 指向的列表中。

          如:print(soup.body.contents)

          可以訪問標(biāo)簽對應(yīng)的父、子、兄弟及祖先標(biāo)簽信息;

          使用strings屬性迭代訪問除標(biāo)簽外的所有內(nèi)容;

          可以使用find、find_all、find_parent、find_parents等系列方法查找滿足特定條件的標(biāo)簽;

          使用select通過css選擇器定位特定標(biāo)簽。


          二、一些解析技巧

          在HTML解析時,如果通過簡單的tag、或單個tag屬性(如id、class)或文本一次搜索或select定位是最簡單的,而有些情況需要使用組合方法才能處理。

          2.1、通過標(biāo)簽的多個屬性組合定位或查找

          經(jīng)常有些要定位的標(biāo)簽有很多,按單個屬性查找也有很多,得使用多個屬性查找。如:

          上面的html文本中有多個id為article_content的div標(biāo)簽,如果使用:

          1. >>> text="""```html
          2. <div id="article_content" class="article_content clearfix">
          3. ......
          4. </div>
          5. <div id="article_content" class="article_view">
          6. ......
          7. </div>
          8. <div id="article_view" class="article_view">
          9. ......
          10. </div>"""
          11. >>> s=BeautifulSoup(text,'lxml')
          12. >>> s.select('div#article_content')
          13. [<div class="article_content clearfix" id="article_content">......</div>,
          14. <div class="article_view" id="article_content">......</div>]
          15. >>>


          就會返回兩條記錄。這時候就可以使用多標(biāo)簽屬性定位的如下4種語句:

          1. >>>s.select('div#article_content[class="article_content clearfix"]')
          2. [<div class="article_content clearfix" id="article_content">......</div>]
          3. >>>s.select('div[id="article_content"][class="article_content clearfix"]')
          4. [<div class="article_content clearfix" id="article_content">......</div>]
          5. >>>s.find_all("div",id="article_content",class_='article_content clearfix')
          6. [<div class="article_content clearfix" id="article_content">......</div>]
          7. >>>s.find_all("div","#article_content",class_='article_content clearfix')
          8. [<div class="article_content clearfix" id="article_content">......</div>]


          以上四種方式是等價的,因為id可以用#來標(biāo)記,class在查找時需要和Python關(guān)鍵字class區(qū)分,因此有上述不同方法,注意select的每個屬性必須用中括號括起來,不同屬性的中括號之間不能有空格,如果有空格表示的就不是查找同一標(biāo)簽的屬性,空格后的屬性表示前一個屬性對應(yīng)標(biāo)簽的子孫標(biāo)簽的屬性。


          2.2、利用tag標(biāo)簽關(guān)系定位內(nèi)容

          tag標(biāo)簽關(guān)系包括父子、兄弟、祖先等關(guān)系,有時要查找或定位的內(nèi)容本身不是很好定位,但結(jié)合其他標(biāo)簽關(guān)系(主要是父子、祖先關(guān)系)則可以唯一確認(rèn)。

          案例:

          這是博文中關(guān)于博主個人信息的部分報文:

          1. <div class="data-info d-flex item-tiling">
          2. <dl class="text-center" title="1055">
          3. <a href=" " data-report-click='{"mod":"1598321000_001","spm":"1001.2101.3001.4310"}' data-report-query="t=1">
          4. <dt><span class="count">1055</span></dt>
          5. <dd class="font">原創(chuàng)</dd>
          6. </a>
          7. </dl>
          8. <dl class="text-center" data-report-click='{"mod":"1598321000_002","spm":"1001.2101.3001.4311"}' title="22">
          9. <a href=" " target="_blank">
          10. <dt><span class="count">22</span></dt>
          11. <dd class="font">周排名</dd>
          12. </a>
          13. </dl>
          14. </div>


          以上報文中,如果要取博主的原創(chuàng)文章數(shù)和周排名,原創(chuàng)文章數(shù)和博主周排名的tag標(biāo)簽完全相同,二者都在span標(biāo)簽內(nèi),標(biāo)簽的屬性及值都相同,只是span標(biāo)簽的父標(biāo)簽dt標(biāo)簽的兄弟標(biāo)簽dd標(biāo)簽的string的中文內(nèi)容才能區(qū)分。對于這種情況,首先要通過祖先標(biāo)簽<div class="data-info d-flex item-tiling">定位到祖先標(biāo)簽,再在祖先標(biāo)簽內(nèi)通過中文字符串定位到要訪問屬性的兄弟標(biāo)簽的子標(biāo)簽,然后通過該子標(biāo)簽找到其父標(biāo)簽的父標(biāo)簽,再通過該父標(biāo)簽的dt子標(biāo)簽的span子標(biāo)簽訪問具體取值。

          示例代碼如下:

          1. >>> text="""
          2. <div class="data-info d-flex item-tiling">
          3. <dl class="text-center" title="1055">
          4. <a href=" " data-report-click='{"mod":"1598321000_001","spm":"1001.2101.3001.4310"}' data-report-query="t=1">
          5. <dt><span class="count">1055</span></dt>
          6. <dd class="font">原創(chuàng)</dd>
          7. </a>
          8. </dl>
          9. <dl class="text-center" data-report-click='{"mod":"1598321000_002","spm":"1001.2101.3001.4311"}' title="22">
          10. <a href=" " target="_blank">
          11. <dt><span class="count">22</span></dt>
          12. <dd class="font">周排名</dd>
          13. </a>
          14. </dl>
          15. </div>"""
          16. >>> s=BeautifulSoup(text,'lxml')
          17. >>> subSoup=s.select('[class="data-info d-flex item-tiling"] [class="font"]')
          18. >>> for item in subSoup:
          19. parent=item.parent
          20. if item.string=='原創(chuàng)':
          21. orignalNum=int(parent.select('.count')[0].string)
          22. elif item.string=='周排名':
          23. weekRank=int(parent.select('.count')[0].string)

          24. >>> print(orignalNum,weekRank)
          25. 1055 22
          26. >>>


          注意:上面的select使用的也是標(biāo)簽的屬性來定位標(biāo)簽,并且兩個中括號之間有空格,表明后一個要查找的標(biāo)簽在前一個屬性對應(yīng)標(biāo)簽的子孫標(biāo)簽范圍內(nèi)。

          2.3、分析前去除程序代碼避免干擾

          在解析HTML報文時,絕大多數(shù)情況是需要分析有用的標(biāo)簽信息,但作為技術(shù)文章,大部分的博文中都有代碼,這些代碼可能會對分析進行干擾。如本文中的代碼含有一些分析的HTML報文,如果獲取本文的完整HTML內(nèi)容,這些報文在非代碼部分也會出現(xiàn),此時要排除代碼的影響,可以將代碼先從分析內(nèi)容中去除再來分析。

          目前大多數(shù)技術(shù)平臺的博文編輯器都支持對代碼的標(biāo)識,象markdown等編輯器代碼的標(biāo)簽為code標(biāo)檢,如果有其他編輯器用不同標(biāo)簽的,只有確認(rèn)了標(biāo)簽名,都可以按下面介紹的類似方式來處理。

          處理步驟如下:

          獲取報文;

          構(gòu)建BeatifulSoap對象soup;

          通過soup.code.extract()或soup.code.decompose()方式就從soup對象中去除了代碼部分,decompose方法與extract方法的區(qū)別就是decompose直接刪除對應(yīng)對象數(shù)據(jù)而extract再刪除時將刪除對象單獨返回。

          三、小結(jié)

          本文介紹了使用BeatifulSoap解析HTML報文的三個使用技巧,包括通過多屬性組合查找或定位標(biāo)簽、通過結(jié)合多個標(biāo)簽關(guān)系來定位標(biāo)簽以及去除html報文中的代碼標(biāo)簽來避免代碼對解析的影響。

          寫字不易,敬請支持:

          如果閱讀本文于您有所獲,敬請點贊、評論、收藏,謝謝大家的支持!

          ————————————————

          版權(quán)聲明:本文為轉(zhuǎn)載文章,如有侵權(quán),請聯(lián)系作者刪除。

          天想聊聊在Web前端開發(fā)中經(jīng)常用到的技術(shù):獲取元素屬性的一系列方法【innerHTML、outerHTML、innerText 、outerText、value、text()、html(),val()】

          這些方法,大家應(yīng)該用過,如果讓你說出它們的一些區(qū)別和聯(lián)系,能答得上來嗎?接下來讓我們一起來溫故下。

          首先我們需要把它們歸類下:

          innerHTML、outerHTML、innerText 、outerText、value 屬于原生javascript的方法。

          text()、html(),val()屬于jQuery中的方法。

          1、innerHTML 屬性

          在讀模式下,innerHTML屬性返回與調(diào)用元素的所有子節(jié)點(包括元素、注釋和文本節(jié)點)對應(yīng)的 HTML 標(biāo)記。在寫模式下,innerHTML 會根據(jù)指定的值創(chuàng)建新的 DOM 樹,然后用這個 DOM 樹完全替換調(diào)用元素原先的所有子節(jié)點。下面是一個例子:


          <div id="content">
           <p>This is a <strong>paragraph</strong> with a list following it.</p>
           <ul>
           <li>Item 1</li>
           <li>Item 2</li>
           <li>Item 3</li>
           </ul>
          </div>
          

          對于上面的<div>元素來說,它的 innerHTML 屬性會返回如下字符串。


          <p>This is a <strong>paragraph</strong> with a list following it.</p>
          <ul>
           <li>Item 1</li>
           <li>Item 2</li>
           <li>Item 3</li>
          </ul>
          


          2、outerHTML 屬性

          在讀模式下,outerHTML 返回調(diào)用它的元素及所有子節(jié)點的 HTML 標(biāo)簽。在寫模式下,outerHTML 會根據(jù)指定的 HTML 字符串創(chuàng)建新的 DOM 子樹完全替換調(diào)用元素。下面是一個例子。


          <div id="content">
           <p>This is a <strong>paragraph</strong> with a list following it.</p>
           <ul>
           <li>Item 1</li>
           <li>Item 2</li>
           <li>Item 3</li>
           </ul>
          </div>
          

          如果在<div>元素上調(diào)用 outerHTML,會返回與上面相同的代碼,包括<div>本身。

          使用 outerHTML 屬性以下面這種方式設(shè)置值:


          div.outerHTML="<p>This is a paragraph.</p>";
          

          這行代碼完成的操作與下面這些 DOM 腳本代碼一樣:


          var p=document.createElement("p");
          p.appendChild(document.createTextNode("This is a paragraph."));
          div.parentNode.replaceChild(p, div);
          

          結(jié)果,就是新創(chuàng)建的<p>元素會取代 DOM 樹中的<div>元素。

          replaceChild() 方法用新節(jié)點替換某個子節(jié)點。

          語法:


          node.replaceChild(newnode,oldnode)
          

          3、innerText 屬性

          通過 innerText 屬性可以操作元素中包含的所有文本內(nèi)容,包括子文檔樹中的文本。在通過 innerText 讀取值時,它會按照由淺入深的順序,將子文檔樹中的所有文本拼接起來。在通過 innerText 寫入值時,結(jié)果會刪除元素的所有子節(jié)點,插入包含相應(yīng)文本值的文本節(jié)點。下面是一個例子:


          <div id="content">
          <p>This is a <strong>paragraph</strong> with a list following it.</p>
          <ul>
          <li>Item 1</li>
          <li>Item 2</li>
          <li>Item 3</li>
          </ul>
          </div>
          

          對于這個例子中的 <div> 元素而言,其中 innerText 屬性會返回下列字符串:


          This is a paragraph with a list following it.
          Item 1
          Item 2
          Item 3
          

          使用 innerText 屬性設(shè)置這個<div>元素內(nèi)容,則只需一行代碼:


          div.innerText="Hello world!";
          

          執(zhí)行這行代碼后,頁面的 HTML 代碼就會變成如下所示:


          <div id="content">Hello world!</div>
          

          設(shè)置 innerText 屬性移除了先前存在的所有子節(jié)點,完全改變了 DOM 樹。

          設(shè)置 innerText 永遠(yuǎn)只會生成當(dāng)前節(jié)點的一個子文本節(jié)點,而為了確保只生成一個字文本節(jié)點,就必須要對文本進行 HTML 編碼。利用這一點,可以通過 innerText 屬性過濾掉 HTML 標(biāo)簽。方法是將 innerText 設(shè)置等于 innerText,這樣就可以去掉所有 HTML 標(biāo)簽,比如:


          div.innerText=div.innerText;
          

          執(zhí)行這行代碼后,就用原來的文本內(nèi)容替換了容器元素中的所有內(nèi)容(包括子節(jié)點,因而也就去掉了 HTML 標(biāo)簽)。舉個栗子:


          <label id="lab">請輸入北京今天空氣質(zhì)量:<input id="aqi-input" type="text"></label>
          

          輸出:

          4、outerText 屬性

          除了作用范圍擴大到了包含 調(diào)用它的節(jié)點之外,outerText 與innerText 基本上沒有多大區(qū)別。在讀取文本值時,outerText 與 innerText 的結(jié)果完全一樣。但在寫模式下,outerText 就完全不同了:outerText 不只是替換調(diào)用它的元素的子節(jié)點,而是會替換整個元素(包括子節(jié)點)。比如:


          div.outerText="Hello world!";
          

          這行代碼實際上相當(dāng)于如下兩行代碼:


          var text=document.createTextNode("Hello world!");
          div.parentNode.replaceChild(text,div);
          

          本質(zhì)上,新的文本節(jié)點會完全取代調(diào)用 outerText 的元素。此后,該元素就從文檔中被刪除,無法訪問。

          5、value 屬性

          屬性可設(shè)置或返回密碼域的默認(rèn)值。獲取文本框的值。

          6、text():設(shè)置或者獲取所選元素的文本內(nèi)容

          1)無參text():

          取得所有匹配元素的內(nèi)容。結(jié)果是由所有匹配元素包含的文本內(nèi)容組合起來的文本。返回的是一個String。

          2)有參text(val):

          設(shè)置所有匹配元素的文本內(nèi)容,與 html() 類似, 但將編碼 HTML (將 "<" 和 ">" 替換成相應(yīng)的HTML實體).返回一個jquery對象。

          7、html():設(shè)置或者獲取所選元素的內(nèi)容(包括html標(biāo)記)

          1)無參html():

          取得第一個匹配元素的html內(nèi)容。這個函數(shù)不能用于XML文檔。但可以用于XHTML文檔,返回的是一個String。

          2)有參html(val):

          設(shè)置每一個匹配元素的html內(nèi)容。這個函數(shù)不能用于XML文檔。但可以用于XHTML文檔。返回一個jquery對象。

          8、val()方法

          主要用于獲取表單元素的值如input, select 和 textarea。當(dāng)在一個空集合上調(diào)用,它返回undefined;

          1)無參 val() :

          獲取匹配的元素集合中第一個元素的當(dāng)前值。例子:

          HTML代碼:


          <input type="text" value="你好啊">
          <input type="text" value="啊哈哈哈">
          <input type="text" value="嘻嘻嘻嘻">
          

          控制臺輸出:

          2)有參val(val):

          設(shè)置每一個匹配元素的值。返回一個jquery對象。

          總結(jié)

          對于這八大方法:innerHTML、outerHTML、innerText 、outerText、value、text()、html(),val()。您現(xiàn)在是否已經(jīng)很清晰了?

          我自己是一名從事了多年開發(fā)的web前端老程序員,目前辭職在做自己的web前端私人定制課程,今年年初我花了一個月整理了一份最適合2019年學(xué)習(xí)的web前端學(xué)習(xí)干貨,各種框架都有整理,送給每一位前端小伙伴,想要獲取的可以關(guān)注我的頭條號并在后臺私信我:前端,即可免費獲取。

          原文鏈接:https://mp.weixin.qq.com/s/K7SyPeuZedmuj-a4HwoYfQ

          作者: 前端大牛愛好者


          主站蜘蛛池模板: 久久AAAA片一区二区| 日韩精品无码一区二区三区 | 日本在线不卡一区| 久久亚洲中文字幕精品一区四| 色老头在线一区二区三区| 亚洲AV日韩AV一区二区三曲| 色老板在线视频一区二区| 亚洲天堂一区在线| 2021国产精品一区二区在线| 国产精品 视频一区 二区三区| 国产主播一区二区三区| 在线观看精品视频一区二区三区| 日韩人妻无码一区二区三区99 | 亚洲av无码一区二区三区观看| 精品人体无码一区二区三区| 精品一区二区三区电影| 国产一区二区三区在线观看免费| 日韩视频免费一区二区三区| 成人免费视频一区| 在线观看国产一区亚洲bd| 国产在线一区二区杨幂| 精品91一区二区三区| 无码一区二区三区中文字幕| 精品一区二区久久| 色窝窝无码一区二区三区色欲| 日韩亚洲一区二区三区| 久久精品午夜一区二区福利 | 日本一区二三区好的精华液| 蜜臀AV无码一区二区三区| 欧亚精品一区三区免费| 日韩高清一区二区三区不卡| 麻豆视频一区二区三区| 亚洲国产精品一区二区九九| 成人区人妻精品一区二区不卡视频| 无码欧精品亚洲日韩一区夜夜嗨 | 国产一区二区三区不卡AV| 麻豆一区二区在我观看 | 亚洲一区二区三区在线观看精品中文 | 国产成人精品无人区一区| 久久国产香蕉一区精品| 中文人妻av高清一区二区|