chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python中BeatifulSoap解析HTML的三個(gè)實(shí)用小技巧詳解

jf_f8pIz0xS ? 來(lái)源:CSDN技術(shù)社區(qū) ? 作者:LaoYuanPython ? 2021-04-15 13:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、BeautifulSoup簡(jiǎn)介

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

BeautifulSoup和lxml安裝命令:

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

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

加載BeautifulSoup:

1from bs4 import BeautifulSoup

BeatifulSoap解析HTML報(bào)文的常用功能:

通過(guò)BeautifulSoup對(duì)象可以訪問(wèn)標(biāo)簽對(duì)應(yīng)的html元素、并進(jìn)一步訪問(wèn)標(biāo)簽的名字、屬性、html元素標(biāo)簽對(duì)中的內(nèi)容。

案例:

1from bs4 import BeautifulSoup

2import urllib.request

3def getURLinf(url):

4header = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36’}

5req = urllib.request.Request(url=url,headers=header)

6resp = urllib.request.urlopen(req,timeout=5)

7html = resp.read().decode()

8soup = BeautifulSoup(html,‘lxml’)

9return (soup,req,resp)

10soup,req ,resp = getURLinf(r‘https://blog.csdn.net/LaoYuanPython/article/details/111303395’)

11print(soup.p)

12print(soup.link)

13print(soup.title)

14print(soup.link.attrs)

15print(soup.link[‘rel’])

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

如:print(soup.body.contents)

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

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

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

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

具體的大家可以參考老猿博客的免費(fèi)專欄《爬蟲(chóng):https://blog.csdn.net/laoyuanpython/category_9103810.html》或付費(fèi)專欄《Python爬蟲(chóng)入門(mén):https://blog.csdn.net/laoyuanpython/category_10762553.html》的相關(guān)介紹。

二、一些解析技巧

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

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

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

1《div id=“article_content” class=“article_content clearfix”》

2。。.。。.

3《/div》

4《div id=“article_content” class=“article_view”》

5。。.。。.

6《/div》

7《div id=“article_view” class=“article_view”》

8。。.。。.

9《/div》

上面的html文本中有多個(gè)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》》》

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

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_=‘a(chǎn)rticle_content clearfix’)

6[《div class=“article_content clearfix” id=“article_content”》。。.。。.《/div》]

7》》》s.find_all(“div”,“#article_content”,class_=‘a(chǎn)rticle_content clearfix’)

8[《div class=“article_content clearfix” id=“article_content”》。。.。。.《/div》]

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

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

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

案例:

這是CSDN的博文中關(guān)于博主個(gè)人信息的部分報(bào)文:

1《div class=“data-info d-flex item-tiling”》

2《dl class=“text-center” title=“1055”》

3《a href=“https://blog.csdn.net/LaoYuanPython” 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=“https://blog.csdn.net/rank/writing_rank” target=“_blank”》

10《dt》《span class=“count”》22《/span》《/dt》

11《dd class=“font”》周排名《/dd》

12《/a》

13《/dl》

14《/div》

以上報(bào)文中,如果要取博主的原創(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ū)分。對(duì)于這種情況,首先要通過(guò)祖先標(biāo)簽《div class=“data-info d-flex item-tiling”》定位到祖先標(biāo)簽,再在祖先標(biāo)簽內(nèi)通過(guò)中文字符串定位到要訪問(wèn)屬性的兄弟標(biāo)簽的子標(biāo)簽,然后通過(guò)該子標(biāo)簽找到其父標(biāo)簽的父標(biāo)簽,再通過(guò)該父標(biāo)簽的dt子標(biāo)簽的span子標(biāo)簽訪問(wèn)具體取值。

示例代碼如下:

1》》》 text=“”“

2《div class=”data-info d-flex item-tiling“》

3《dl class=”text-center“ title=”1055“》

4《a href=”https://blog.csdn.net/LaoYuanPython“ 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=”https://blog.csdn.net/rank/writing_rank“ 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:

19parent = item.parent

20if item.string==‘原創(chuàng)’:

21orignalNum = int(parent.select(‘.count’)[0].string)

22elif item.string==‘周排名’:

23weekRank = int(parent.select(‘.count’)[0].string)

24》》》 print(orignalNum,weekRank)

251055 22

26》》》

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

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

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

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

處理步驟如下:

獲取報(bào)文;

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

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

關(guān)于這部分內(nèi)容的案例可以參考《https://blog.csdn.net/LaoYuanPython/article/details/114729045 n行Python代碼系列:四行程序分離HTML報(bào)文中的程序代碼》的詳細(xì)介紹。

三、小結(jié)

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

編輯:lyn

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • HTML
    +關(guān)注

    關(guān)注

    0

    文章

    280

    瀏覽量

    48463
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4876

    瀏覽量

    90038
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    解析碳化硅MOS管在型號(hào)替換背后存在的三個(gè)主要差異

    碳化硅MOS管為什么不能簡(jiǎn)單根據(jù)型號(hào)直接替代?從參數(shù)匹配到系統(tǒng)驗(yàn)證主要有三個(gè)差異。當(dāng)工程師看到一份標(biāo)注著“耐壓1200V、電流33A、導(dǎo)通電阻60mΩ”的產(chǎn)品規(guī)格書(shū)時(shí),第一反應(yīng)往往是尋找參數(shù)相同
    的頭像 發(fā)表于 02-28 10:50 ?423次閱讀

    駿馬奔騰,芯向未來(lái):SiC功率器件的“三個(gè)必然”與丙午馬年的產(chǎn)業(yè)躍遷

    : 碳化硅 (SiC);三個(gè)必然;自主可控;產(chǎn)業(yè)升級(jí);基本半導(dǎo)體;青銅劍技術(shù);馬年祝福 序章:金戈鐵馬,氣吞萬(wàn)里如虎——站在丙午馬年的歷史門(mén)檻 當(dāng)時(shí)光的車輪滾滾向前,即將跨越乙巳蛇年的尾聲,正式邁入2026丙午馬年。在中國(guó)傳統(tǒng)文化,“馬”象征著
    的頭像 發(fā)表于 02-15 10:33 ?46次閱讀
    駿馬奔騰,芯向未來(lái):SiC功率器件的“<b class='flag-5'>三個(gè)</b>必然”與丙午馬年的產(chǎn)業(yè)躍遷

    altium designer 如何畫(huà)短路兩個(gè)或者三個(gè)網(wǎng)絡(luò)的封裝?

    如何我畫(huà)了一個(gè)天線,有3個(gè)引腳,TX1,TX2,GND, 但實(shí)際上這三個(gè)引腳是連在一起的。我導(dǎo)入pcb后,會(huì)報(bào)DRC警告,這個(gè)該怎么解決?
    發(fā)表于 02-12 19:30

    1688 商品詳情 API 調(diào)用與數(shù)據(jù)解析 Python 實(shí)戰(zhàn)

    你想要的是 1688 商品詳情 API 的 Python 調(diào)用與數(shù)據(jù)解析實(shí)戰(zhàn)方案,核心是完成 API 憑證配置、接口請(qǐng)求(含簽名)、響應(yīng)數(shù)據(jù)解析、異常處理 的全流程落地,我會(huì)提供可直接運(yùn)行的代碼,并
    的頭像 發(fā)表于 02-10 11:23 ?263次閱讀

    三個(gè)經(jīng)典開(kāi)關(guān)電源實(shí)際問(wèn)題解析

    下面三個(gè)關(guān)于多路輸出電源連續(xù)工作模式的問(wèn)題,測(cè)試一下您的電源設(shè)計(jì)知識(shí)。然后核對(duì)您的答案。
    的頭像 發(fā)表于 01-22 16:08 ?1902次閱讀
    <b class='flag-5'>三個(gè)</b>經(jīng)典開(kāi)關(guān)電源實(shí)際問(wèn)題<b class='flag-5'>解析</b>

    MDD從工程故障看極管三個(gè)極的設(shè)計(jì)誤區(qū)與失效案例

    一、為什么極管問(wèn)題總是“看起來(lái)很隨機(jī)”?在FAE現(xiàn)場(chǎng)支持,經(jīng)常遇到如下問(wèn)題:-同一電路,有的板子正常,有的異常-高溫下工作不穩(wěn)定-更換批次后性能漂移這些問(wèn)題,90%都與三個(gè)極的設(shè)計(jì)與使用方式有關(guān)
    的頭像 發(fā)表于 01-19 11:48 ?204次閱讀
    MDD從工程故障看<b class='flag-5'>三</b>極管<b class='flag-5'>三個(gè)</b>極的設(shè)計(jì)誤區(qū)與失效案例

    Termux調(diào)試圣誕樹(shù)Python代碼

    在Termux調(diào)試Python代碼(以圣誕樹(shù)立例)非常簡(jiǎn)單,核心分為環(huán)境準(zhǔn)備、代碼編寫(xiě)、運(yùn)行調(diào)試三個(gè)步驟,下面一步步教你操作: 一、環(huán)境準(zhǔn)備(首次使用需做) Termux默認(rèn)可能沒(méi)有Pyth
    發(fā)表于 12-09 09:02

    未來(lái)工業(yè)AI發(fā)展的三個(gè)必然階段

    與優(yōu)化 能力的深層革命。 未來(lái)十年,工業(yè)AI的發(fā)展將經(jīng)歷三個(gè)清晰的階段:? 智能輔助 → 智能決策 → 自主優(yōu)化 。這次進(jìn)化,構(gòu)成了工業(yè)從“人控機(jī)器”到“機(jī)器共智”的核心路徑。 一、第一階段:智能輔助(AI for Assistance) 時(shí)間窗口:
    的頭像 發(fā)表于 10-27 15:47 ?454次閱讀
    未來(lái)工業(yè)AI發(fā)展的<b class='flag-5'>三個(gè)</b>必然階段

    VVIC 平臺(tái)商品詳情接口高效調(diào)用方案:從簽名驗(yàn)證到數(shù)據(jù)解析全流程

    本文詳解VVIC平臺(tái)商品詳情接口調(diào)用全流程,涵蓋參數(shù)配置、簽名生成、異常處理與數(shù)據(jù)解析,提供可復(fù)用的Python代碼及避坑指南,助力開(kāi)發(fā)者高效實(shí)現(xiàn)安全、穩(wěn)定的數(shù)據(jù)對(duì)接。
    的頭像 發(fā)表于 09-23 10:28 ?689次閱讀

    怎么結(jié)合嵌入式,Linux,和FPGA三個(gè)方向達(dá)到一個(gè)均衡發(fā)展?

    在嵌入式領(lǐng)域,不少人都懷揣著讓嵌入式、Linux 和 FPGA 三個(gè)方向?qū)崿F(xiàn)均衡發(fā)展的夢(mèng)想,然而實(shí)踐卻面臨諸多挑戰(zhàn)。就像備受矚目的全棧工程師稚暉君,他從大學(xué)玩單片機(jī)起步,憑借將智能算法融入嵌入式而
    的頭像 發(fā)表于 06-25 10:08 ?867次閱讀
    怎么結(jié)合嵌入式,Linux,和FPGA<b class='flag-5'>三個(gè)</b>方向達(dá)到一<b class='flag-5'>個(gè)</b>均衡發(fā)展?

    【HarmonyOS 5】鴻蒙的UIAbility詳解

    【HarmonyOS 5】鴻蒙的UIAbility詳解) ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、前言 本文是鴻蒙的UIA
    的頭像 發(fā)表于 06-14 22:32 ?755次閱讀

    python入門(mén)圣經(jīng)-高清電子書(shū)(建議下載)

    和Pygal 等強(qiáng)大的Python 庫(kù)和工具介紹,以及列表、字典、if 語(yǔ)句、類、文件與異常、代碼測(cè)試等內(nèi)容; 第二部分將理論付諸實(shí)踐,講解如何開(kāi)發(fā)三個(gè)項(xiàng)目,包括簡(jiǎn)單的Python 2D 游戲開(kāi)發(fā)如何利用數(shù)據(jù)
    發(fā)表于 04-10 16:53

    半導(dǎo)體制造過(guò)程三個(gè)主要階段

    前段工藝(Front-End)、中段工藝(Middle-End)和后段工藝(Back-End)是半導(dǎo)體制造過(guò)程三個(gè)主要階段,它們?cè)谥圃爝^(guò)程扮演著不同的角色。
    的頭像 發(fā)表于 03-28 09:47 ?7340次閱讀
    半導(dǎo)體制造過(guò)程<b class='flag-5'>中</b>的<b class='flag-5'>三個(gè)</b>主要階段

    如何檢測(cè)極管的三個(gè)

    可以用萬(wàn)用表來(lái)初步確定極管的好壞及類型 (NPN 型還是 PNP 型 ),并辨別出e(發(fā)射極)、b(基極)、c(集電極)三個(gè)電極。
    發(fā)表于 03-08 16:40

    如何區(qū)分場(chǎng)效應(yīng)管mos管三個(gè)引腳

    場(chǎng)效應(yīng)管mos管三個(gè)引腳怎么區(qū)分
    發(fā)表于 03-07 09:20 ?0次下載