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 成人美女免费网站视频,久久综合九色婷婷97,精品免费久久久久久影院

          整合營銷服務(wù)商

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

          免費咨詢熱線:

          解析HTML報文的三個實用技巧之BeatifulSoap

          、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)系作者刪除。

          家好,我是Python進階者。

          一、前言

          前幾天在Python最強王者交流群【ZXS】問了一個Python網(wǎng)絡(luò)爬蟲實戰(zhàn)問題。問題如下:

          我這里遇到一個問題:【爬取免費IP代理時,無法解析到數(shù)據(jù)】, 我通過 xpath,css定位到了元素,但是在運行時返回空列表,請問我該怎么解決呀 以下是解析數(shù)據(jù)的截圖:

          他自己提供了數(shù)據(jù)和寫的代碼如下:

          不過代碼得到的結(jié)果不是自己想要的。

          二、實現(xiàn)過程

          這里【吳超建】給了一個思路:css貌似寫得不對。并且給出了對應(yīng)html解析。

          后來才發(fā)現(xiàn)粉絲自己把網(wǎng)站搞錯了,真是太尷尬了。

          不過針對粉絲當(dāng)前的代碼,不換網(wǎng)站的話,修改xpath后也是可以跑的通的。

          順利地解決了粉絲的問題。

          如果你也有類似這種Python相關(guān)的小問題,歡迎隨時來交流群學(xué)習(xí)交流哦,有問必答!

          通過這個粉絲需求問答,我們確切的感受到了AI助力Python實戰(zhàn)需求的能力了,我最近也是一直在接觸AIGC,從最開始的ChatGPT到最近火爆出圈的Sora,也建立了自己的AIGC分享群,目前也帶動了500以上的AIGC愛好者一起學(xué)習(xí),群里每周都會分享AIGC相關(guān)的內(nèi)容,從認(rèn)識AIGC,到使用AIGC,再到利用AIGC變現(xiàn),我會帶大家一起進軍AIGC時代。大家可以在后臺加我v,我拉你們進入AIGC學(xué)習(xí)群!

          三、總結(jié)

          大家好,我是Python進階者。這篇文章主要盤點了一個Python庫安裝的問題,文中針對該問題,給出了具體的解析和代碼實現(xiàn),幫助粉絲順利解決了問題。

          最后感謝粉絲【ZXS】提出的問題,感謝【吳超建】給出的思路,感謝【莫生氣】等人參與學(xué)習(xí)交流。

          【提問補充】溫馨提示,大家在群里提問的時候。可以注意下面幾點:如果涉及到大文件數(shù)據(jù),可以數(shù)據(jù)脫敏后,發(fā)點demo數(shù)據(jù)來(小文件的意思),然后貼點代碼(可以復(fù)制的那種),記得發(fā)報錯截圖(截全)。代碼不多的話,直接發(fā)代碼文字即可,代碼超過50行這樣的話,發(fā)個.py文件就行。

          網(wǎng)頁開發(fā)過程中,我們有時會遇到HTML頁面白屏的問題,即打開網(wǎng)頁時頁面顯示空白,沒有任何內(nèi)容。這不僅令用戶困惑,也使開發(fā)者頭疼不已。本文將分享一些常見的HTML頁面白屏問題解決方法,幫助你快速解決這個問題,讓你的網(wǎng)頁煥然一新!

          第一步:檢查HTML代碼

          首先,我們需要檢查HTML代碼是否正確。常見的錯誤包括標(biāo)簽未閉合、標(biāo)簽嵌套錯誤等。這些錯誤可能會導(dǎo)致頁面無法正常顯示。因此,仔細檢查HTML代碼,確保沒有語法錯誤是解決白屏問題的第一步。

          第二步:檢查CSS文件

          HTML頁面的樣式通常由CSS文件控制。如果CSS文件中存在錯誤或者無法正常加載,可能會導(dǎo)致頁面白屏。我們可以通過以下步驟檢查CSS文件是否存在問題:

          1、檢查CSS文件路徑是否正確:確保CSS文件的路徑正確,并且文件存在于指定的位置。可以通過瀏覽器開發(fā)者工具查看網(wǎng)絡(luò)面板,檢查CSS文件是否被成功加載。

          2、檢查CSS文件語法錯誤:使用CSS驗證工具,如W3C CSS驗證服務(wù),檢查CSS文件是否存在語法錯誤。如果存在錯誤,及時修復(fù)。

          3、檢查CSS選擇器和樣式規(guī)則:檢查CSS文件中的選擇器和樣式規(guī)則是否正確。可能存在選擇器與HTML元素不匹配或樣式規(guī)則沖突的情況。可以通過逐個注釋掉樣式規(guī)則,逐步排查問題。

          第三步:檢查JavaScript代碼

          JavaScript代碼也可能導(dǎo)致頁面白屏。以下是檢查JavaScript代碼的步驟:

          1、檢查JS文件路徑是否正確:與CSS文件類似,確保JS文件的路徑正確,并且文件存在于指定的位置。通過瀏覽器開發(fā)者工具查看控制臺面板,檢查是否有JS文件加載錯誤的提示信息。

          2、檢查JS代碼語法錯誤:使用JS語法檢查工具,檢查JS代碼是否存在語法錯誤。如果有錯誤,及時修復(fù)。

          3、檢查JS代碼邏輯錯誤:檢查JS代碼中的邏輯是否正確。可能存在變量未定義、函數(shù)未調(diào)用或者邏輯錯誤等問題。可以通過調(diào)試工具,如瀏覽器開發(fā)者工具中的調(diào)試器,逐步排查問題。

          第四步:排查網(wǎng)絡(luò)請求問題

          如果前面的步驟都沒有發(fā)現(xiàn)問題,那么可能是網(wǎng)絡(luò)請求出現(xiàn)了問題。以下是一些排查網(wǎng)絡(luò)請求問題的方法:

          1、檢查網(wǎng)絡(luò)連接:確保你的設(shè)備已連接到互聯(lián)網(wǎng),并且網(wǎng)絡(luò)連接穩(wěn)定。

          2、檢查資源加載狀態(tài):通過瀏覽器開發(fā)者工具的網(wǎng)絡(luò)面板,檢查頁面中的資源加載狀態(tài)。可能存在資源加載失敗或者超時的情況,導(dǎo)致頁面白屏。

          3、檢查服務(wù)器配置:如果你使用了服務(wù)器端腳本語言,如PHP,檢查服務(wù)器配置是否正確。可能存在服務(wù)器配置問題導(dǎo)致頁面無法正確渲染。

          第五步:優(yōu)化頁面性能

          如果以上方法都沒有解決問題,那么可能是頁面性能問題導(dǎo)致白屏。以下是一些優(yōu)化頁面性能的方法:

          1、壓縮和合并文件:將CSS和JS文件進行壓縮和合并,減少文件的大小和數(shù)量,提高頁面加載速度。

          2、使用緩存:利用瀏覽器緩存機制,將靜態(tài)資源進行緩存,減少服務(wù)器的請求次數(shù),提高頁面加載速度。

          3、異步加載資源:使用異步加載技術(shù),如異步加載JS文件或使用延遲加載,減少頁面加載時間。

          4、減少HTTP請求:減少頁面中的HTTP請求次數(shù)等。

          結(jié)語:

          通過以上五個步驟,我們可以逐步排查HTML頁面白屏問題,并解決它們。不同的問題可能需要不同的解決方法,因此需要耐心和細心地分析和排查。在開發(fā)過程中,我們也要時刻關(guān)注頁面性能,優(yōu)化頁面加載速度,提高用戶體驗。


          主站蜘蛛池模板: 亚洲av无码不卡一区二区三区| 麻豆AV天堂一区二区香蕉| 精品一区二区三区3d动漫| 日本精品无码一区二区三区久久久 | 夜夜精品视频一区二区| 国产精品免费综合一区视频| 激情啪啪精品一区二区| 久久精品无码一区二区日韩AV| 久久99精品国产一区二区三区| 精品人妻AV一区二区三区| 午夜一区二区免费视频| 日韩精品一区二区三区影院| 曰韩精品无码一区二区三区| 日本午夜精品一区二区三区电影| 中文字幕一区二区精品区| 国产成人精品第一区二区| 视频一区二区中文字幕| 中文字幕aⅴ人妻一区二区| 中文字幕日韩丝袜一区| 亚洲一区二区三区在线播放| 日韩精品视频一区二区三区| 国产在线一区二区三区av| 一区二区三区91| 91精品福利一区二区| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 国产精品免费综合一区视频| 国产在线步兵一区二区三区| 精品乱子伦一区二区三区| 国产在线精品观看一区| 精品人体无码一区二区三区| 色窝窝无码一区二区三区 | 立川理惠在线播放一区| 久久人妻av一区二区软件 | 无码精品久久一区二区三区 | 精品无码国产一区二区三区AV| 毛片一区二区三区无码| 无码人妻一区二区三区免费看| 国产伦精品一区二区三区无广告| 国内精品无码一区二区三区| 国产怡春院无码一区二区| 国产AV一区二区三区传媒|