色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

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

jf_f8pIz0xS ? 來源:CSDN技術(shù)社區(qū) ? 作者:LaoYuanPython ? 2021-04-15 13:51 ? 次閱讀

一、BeautifulSoup簡介

BeautifulSoup是Python爬蟲應(yīng)用解析Html的利器,是Python三方模塊bs4中提供的進(jìn)行HTML解析的類,可以認(rèn)為是一個(gè)HTML解析工具箱,對HTML報(bào)文中的標(biāo)簽具有比較好的容錯(cuò)識別功能。lxml是一款html文本解析器,BeautifulSoup構(gòu)建對象時(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)文的常用功能:

通過BeautifulSoup對象可以訪問標(biāo)簽對應(yīng)的html元素、并進(jìn)一步訪問標(biāo)簽的名字、屬性、html元素標(biāo)簽對中的內(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’])

通過標(biāo)簽的contents屬性,可以訪問其下嵌套的所有下級HTML元素,這些該標(biāo)簽下的子標(biāo)簽對應(yīng)的HTML元素放到一個(gè)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)簽。

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

二、一些解析技巧

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

2.1、通過標(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》》》

就會返回兩條記錄。這時(shí)候就可以使用多標(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_=‘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可以用#來標(biāo)記,class在查找時(shí)需要和Python關(guān)鍵字class區(qū)分,因此有上述不同方法,注意select的每個(gè)屬性必須用中括號括起來,不同屬性的中括號之間不能有空格,如果有空格表示的就不是查找同一標(biāo)簽的屬性,空格后的屬性表示前一個(gè)屬性對應(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ū)分。對于這種情況,首先要通過祖先標(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=”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)簽的屬性來定位標(biāo)簽,并且兩個(gè)中括號之間有空格,表明后一個(gè)要查找的標(biāo)簽在前一個(gè)屬性對應(yīng)標(biāo)簽的子孫標(biāo)簽范圍內(nèi)。

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

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

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

處理步驟如下:

獲取報(bào)文;

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

通過soup.code.extract()或soup.code.decompose()方式就從soup對象中去除了代碼部分,decompose方法與extract方法的區(qū)別就是decompose直接刪除對應(yīng)對象數(shù)據(jù)而extract再刪除時(shí)將刪除對象單獨(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è)使用技巧,包括通過多屬性組合查找或定位標(biāo)簽、通過結(jié)合多個(gè)標(biāo)簽關(guān)系來定位標(biāo)簽以及去除html報(bào)文中的代碼標(biāo)簽來避免代碼對解析的影響。

編輯:lyn

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

    關(guān)注

    0

    文章

    278

    瀏覽量

    35209
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4792

    瀏覽量

    84628
收藏 人收藏

    評論

    相關(guān)推薦

    Python解析:通過庫實(shí)現(xiàn)代理請求與數(shù)據(jù)抓取

    Python,有多個(gè)庫可以幫助你實(shí)現(xiàn)代理請求和數(shù)據(jù)抓取。這些庫提供了豐富的功能和靈活的API,使得你可以輕松地發(fā)送HTTP請求、處理響應(yīng)、解析HTML/XML/JSON數(shù)據(jù),以及進(jìn)
    的頭像 發(fā)表于 10-24 07:54 ?164次閱讀

    簡述光刻工藝的三個(gè)主要步驟

    “ 光刻作為半導(dǎo)體的關(guān)鍵工藝,其中包括3大步驟的工藝:涂膠、曝光、顯影。三個(gè)步驟有一個(gè)異常,整個(gè)光刻工藝都需要返工處理,因此現(xiàn)場異常的處理顯得尤為關(guān)鍵”
    的頭像 發(fā)表于 10-22 13:52 ?512次閱讀

    自動發(fā)電控制系統(tǒng)具有三個(gè)基本功能

    自動發(fā)電控制系統(tǒng)(AGC)具有三個(gè)基本功能,這些功能在電力系統(tǒng)的運(yùn)行和調(diào)度中發(fā)揮著重要作用。以下是這三個(gè)基本功能的詳細(xì)解析
    的頭像 發(fā)表于 10-03 15:05 ?461次閱讀

    基本理想電路元件的三個(gè)特征是什么

    基本理想電路元件是構(gòu)成電路的基本單元,它們具有三個(gè)基本特征:電壓-電流關(guān)系、能量轉(zhuǎn)換和電路參數(shù)。以下是對這三個(gè)特征的分析: 電壓-電流關(guān)系 理想電路元件的電壓-電流關(guān)系是其最基本的特征之一。這種關(guān)系
    的頭像 發(fā)表于 08-25 09:38 ?1068次閱讀

    對稱相電壓的特點(diǎn)是哪三個(gè)方面

    相電壓的特點(diǎn)。 一、對稱相電壓的基本概念 1.1 相電壓的定義 相電壓是指在電力系統(tǒng),由三個(gè)相位組成的電壓。這
    的頭像 發(fā)表于 08-12 18:18 ?1196次閱讀

    可調(diào)變阻器三個(gè)引腳怎么區(qū)分

    可調(diào)變阻器,也稱為電位器或可變電阻器,是一種可以調(diào)節(jié)電阻值的電子元件。它廣泛應(yīng)用于各種電子設(shè)備,如音頻設(shè)備、電源管理、電機(jī)控制等。可調(diào)變阻器有三個(gè)引腳,分別是固定端、滑動端和可調(diào)端。這三個(gè)引腳
    的頭像 發(fā)表于 07-24 11:12 ?1186次閱讀

    可調(diào)電阻三個(gè)腳各是什么

    可調(diào)電阻器,也稱為電位器或可變電阻器,是一種可調(diào)節(jié)電阻值的電子元件。它通常由三個(gè)腳(引腳)組成,分別是固定腳、滑動腳和可調(diào)腳。以下是對這三個(gè)腳的介紹: 固定腳(Fixed Terminal): 固定
    的頭像 發(fā)表于 07-24 11:06 ?1934次閱讀

    微波測量的三個(gè)基本參量是什么

    微波測量是電子工程領(lǐng)域中的一個(gè)重要分支,它涉及到對微波信號的頻率、幅度、相位等參數(shù)的測量。在微波測量,有三個(gè)基本參量:頻率、幅度和相位。這三個(gè)參量是微波信號的基本特征,對于微波系統(tǒng)的
    的頭像 發(fā)表于 05-28 14:46 ?1327次閱讀

    如何判斷極管的三個(gè)極性

    極管是電子電路的基本元件之一,其性能的好壞直接影響到整個(gè)電路的性能。而判斷極管的三個(gè)極性(基極b、發(fā)射極e、集電極c)是電路分析和設(shè)計(jì)
    的頭像 發(fā)表于 05-21 15:26 ?6370次閱讀

    個(gè)籬笆三個(gè)樁——記晶體極管的發(fā)明

    個(gè)籬笆三個(gè)樁——記晶體極管的發(fā)明
    的頭像 發(fā)表于 05-12 08:14 ?714次閱讀
    一<b class='flag-5'>個(gè)</b>籬笆<b class='flag-5'>三個(gè)</b>樁——記晶體<b class='flag-5'>三</b>極管的發(fā)明

    python解析netflow數(shù)據(jù)到csv的流程詳解

    本文主要講解了linux下通過tcpdump抓取netflow數(shù)據(jù)包,并將其導(dǎo)入到wireshark進(jìn)行解析,然后通過wireshark導(dǎo)出數(shù)據(jù)為json文件,再通過python腳本將其解析為csv文件以便做數(shù)據(jù)分析。
    的頭像 發(fā)表于 05-01 11:18 ?665次閱讀
    <b class='flag-5'>python</b><b class='flag-5'>解析</b>netflow數(shù)據(jù)到csv的流程<b class='flag-5'>詳解</b>

    pythonopen函數(shù)的用法詳解

    pythonopen函數(shù)的用法詳解 Python的open()函數(shù)用于打開文件。它接受文件名和模式作為參數(shù),并返回一
    的頭像 發(fā)表于 01-30 15:31 ?2085次閱讀

    飛機(jī)的三個(gè)舵面以及如何控制

    飛機(jī)通常具有三個(gè)主要的舵面,它們是方向舵(rudder)、副翼(aileron)和升降舵(elevator)。
    發(fā)表于 01-15 14:54 ?5700次閱讀
    飛機(jī)的<b class='flag-5'>三個(gè)</b>舵面以及如何控制

    控制靜電放電的三個(gè)基本原則

    控制靜電放電的三個(gè)基本原則? 控制靜電放電是一項(xiàng)關(guān)鍵的工程問題,尤其是在現(xiàn)代工業(yè)。靜電放電不僅可能損壞電子設(shè)備和電子元件,還可能引發(fā)火災(zāi)和爆炸等安全問題。為了有效地控制靜電放電,我們需要遵循三個(gè)
    的頭像 發(fā)表于 01-03 11:00 ?2317次閱讀

    使用Chiplet的三個(gè)優(yōu)勢介紹

    小芯片的第三個(gè)主要好處是,即使是首次設(shè)計(jì),它們也可以顯著加快上市時(shí)間,從而使芯片制造商能夠更快地進(jìn)入市場。
    的頭像 發(fā)表于 12-27 14:34 ?720次閱讀
    使用Chiplet的<b class='flag-5'>三個(gè)</b>優(yōu)勢介紹
    主站蜘蛛池模板: 97碰成视频免费| 9位美女厕所撒尿11分| 久久笫一福利免费导航| 国产欧美在线亚洲一区刘亦菲 | 午夜爽喷水无码成人18禁三级| 亚洲性爱城| 亚洲精品网址| 朝鲜美女bbwbbw撒尿| 久久国产高清视频| 无码人妻少妇色欲AV一区二区 | 亚洲AV色香蕉一区二区三区| freehd另类xxxx喷水| 久久只精品99品免费久| 亚洲国产成人精品青青草原100 | 久久精品九九亚洲精品天堂| 忘忧草在线社区WWW日本直播| georgielyall装修工| 美女脱内衣裸身尿口露出来 | 99精品免费久久久久久久久日本| 国产精品视频第一区二区三区| 青青草 久久久| aaa在线观看视频高清视频| 久久橹| 一区三区三区不卡| 国产在线伊人| 亚洲91av| 国内卡一卡二卡三免费网站| 亚洲AV久久无码精品九九软件| 国产传媒18精品免费观看| 色欲精品久久人妻AV中文字幕| xxx军人3p大gay| 日韩黄色免费| 国产精品久久精品视| 午夜啪啪免费视频| 国产免费人成在线看视频| 亚洲高清中文字幕| 精品国产在天天线在线麻豆| 亚洲视频中文字幕在线| 理论937| 成人性生交大片免费看4| 蜜臀AV熟女人妻中文字幕|