欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python爬蟲網(wǎng)頁元素定位術(shù)

 更新時(shí)間:2022年05月17日 16:52:45   作者:夢(mèng)想橡皮擦  
這篇文章主要介紹了Python爬蟲網(wǎng)頁元素定位術(shù),文章通過Beautiful?Soup模塊展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

實(shí)戰(zhàn)場(chǎng)景

初學(xué) Python 爬蟲,十之八九大家采集的目標(biāo)是網(wǎng)頁,因此快速定位到網(wǎng)頁內(nèi)容,就成為我們面臨的第一道障礙,本篇博客就為你詳細(xì)說明最易上手的網(wǎng)頁元素定位術(shù),學(xué)完就會(huì)系列。

本文核心使用到的是 Beautiful Soup 模塊,因此我們用來做測(cè)試采集的站點(diǎn),也是其官網(wǎng)(現(xiàn)階段爬蟲采集越來越嚴(yán)格,很多站點(diǎn)不能在采集了,很容易被封殺,只能學(xué)誰就采集誰了)

官方站點(diǎn):

www.crummy.com/software/BeautifulSoup/

Beautiful Soup 在 Python 爬蟲圈知名度極高,而且非常好用,它是一款 Python 解析庫,主要用于將 HTML 標(biāo)簽轉(zhuǎn)換為 Python 對(duì)象樹,然后讓我們從對(duì)象樹中提取數(shù)據(jù)。

模塊的安裝及其簡單:

pip install bs4 -i 國內(nèi)任意源即可

未來安裝任何模塊,都盡量使用國內(nèi)源,速度快穩(wěn)定。

該模塊包名稱為 bs4,安裝的時(shí)候需要特別注意下。

基礎(chǔ)用法如下所示

import requests
from bs4 import BeautifulSoup
def ret_html():
    """獲取HTML元素"""
    res = requests.get('https://www.crummy.com/software/BeautifulSoup/', timeout=3)
    return res.text
if __name__ == '__main__':
    html_str = ret_html()
    soup = BeautifulSoup(html_str, 'lxml')
    print(soup)

其中需要注意的就是模塊導(dǎo)入代碼,以及實(shí)例化 soup 對(duì)象時(shí),在 BeautifulSoup 類的構(gòu)造函數(shù)中傳遞的兩個(gè)參數(shù),一個(gè)是待解析的字符串,另一個(gè)是解析器,官方建議的是 lxml,因其解析速度快。

上述代碼輸出的內(nèi)容如下所示,看上去就是普通的 HTML 代碼文件。

而且我們可以調(diào)用 soup 對(duì)象的 soup.prettify() 方法,可以將 HTML 標(biāo)簽進(jìn)行格式化操作,這樣你就可以在存儲(chǔ)到外部文件的時(shí)候,讓其 HTML 代碼進(jìn)行美觀。

BeautifulSoup 模塊的對(duì)象說明

BeautifulSoup 類可以將 HTML 文本解析成 Python 對(duì)象樹,而這里面又包括最重要的四種對(duì)象,分別是 Tag,NavigableString,BeautifulSoup,Comment 對(duì)象,接下來我們一一介紹。

BeautifulSoup 對(duì)象

該對(duì)象本身就代表整個(gè) HTML 頁面,而且實(shí)例化該對(duì)象的時(shí)候,還會(huì)自動(dòng)補(bǔ)齊 HTML 代碼。

    html_str = ret_html()
    soup = BeautifulSoup(html_str, 'lxml')
    print(type(soup))

Tag 對(duì)象

Tag 是標(biāo)簽的意思,Tag 對(duì)象就是網(wǎng)頁標(biāo)簽,或者叫做網(wǎng)頁元素對(duì)象,例如獲取 bs4 官網(wǎng)的 h1 標(biāo)簽對(duì)象,代碼如下所示:

if __name__ == '__main__':
    html_str = ret_html()
    soup = BeautifulSoup(html_str, 'lxml')
    # print(soup.prettify())  # 格式化 HTML
    print(soup.h1)

得到的也是網(wǎng)頁中的 h1 標(biāo)簽:

<h1>Beautiful Soup</h1>

用 Python 中的 type 函數(shù),可以查看其類型,代碼如下:

    print(soup.h1)
    print(type(soup.h1))

此時(shí)得到的可不是一個(gè)字符串,而是一個(gè) Tag 對(duì)象。

<h1>Beautiful Soup</h1>
<class 'bs4.element.Tag'>

既然是 Tag 對(duì)象,那就會(huì)具備一些特定的屬性值

獲取標(biāo)簽名稱

    print(soup.h1)
    print(type(soup.h1))
    print(soup.h1.name)  # 獲取標(biāo)簽名稱

通過 Tag 對(duì)象獲取標(biāo)簽的屬性值

 print(soup.img)  # 獲取網(wǎng)頁第一個(gè) img 標(biāo)簽
 print(soup.img['src'])  # 獲取網(wǎng)頁元素DOM的屬性值

通過 attrs 屬性獲取標(biāo)簽的所有屬性

print(soup.img)  # 獲取網(wǎng)頁第一個(gè) img 標(biāo)簽
print(soup.img.attrs)  # 獲取網(wǎng)頁元素的所有屬性值,以字典形式返回

以上代碼的所有輸出如下所示,可以任意選擇標(biāo)簽進(jìn)行練習(xí)。

<h1>Beautiful Soup</h1>
<class 'bs4.element.Tag'>
h1
<img align="right" src="10.1.jpg" width="250"/>
{'align': 'right', 'src': '10.1.jpg', 'width': '250'}

NavigableString 對(duì)象

NavigableString 對(duì)象獲取的是標(biāo)簽內(nèi)部的文字內(nèi)容,例如p標(biāo)簽,在下述代碼中提取的是我是橡皮擦

<p>我是橡皮擦</p>

獲取該對(duì)象也非常容易,使用 Tag 對(duì)象的 string 屬性即可。

    nav_obj = soup.h1.string
    print(type(nav_obj))

輸出結(jié)果如下所示:

<class 'bs4.element.NavigableString'>

如果目標(biāo)標(biāo)簽是一個(gè)單標(biāo)簽,會(huì)獲取到 None 數(shù)據(jù)

除了使用對(duì)象的string方法外,還可以使用text屬性和get_text()方法來獲取標(biāo)簽內(nèi)容

    print(soup.h1.text)
    print(soup.p.get_text())
    print(soup.p.get_text('&'))

其中 text是獲取所有子標(biāo)簽內(nèi)容的合并字符串,而get_text()也是相同的效果,不過使用get_text()可以增加一個(gè)分隔符,例如上述代碼的&符號(hào),還可以使用,strip=True 參數(shù)去除空格。

Comment 對(duì)象

BeautifulSoup 對(duì)象和 Tag 對(duì)象支持標(biāo)簽查找方法,具體內(nèi)容如下所示。

find() 方法和 find_all() 方法

調(diào)用 BeautifulSoup 對(duì)象和 Tag 對(duì)象的find()方法,可以在網(wǎng)頁中找到指定對(duì)象,

該方法的語法格式如下:

obj.find(name,attrs,recursive,text,**kws)

方法的返回結(jié)果是查找到的第一個(gè)元素,如果沒查詢到,返回 None。 參數(shù)說明如下:

  • name:標(biāo)簽名稱;
  • attrs:標(biāo)簽屬性;
  • recursive:默認(rèn)搜索所有后代元素;
  • text:標(biāo)簽內(nèi)容。

例如我們繼續(xù)在上文請(qǐng)求的網(wǎng)頁中,查找a標(biāo)簽,代碼如下:

html_str = ret_html()
soup = BeautifulSoup(html_str, 'lxml')
print(soup.find('a'))

也可以使用attrs參數(shù)進(jìn)行查找,代碼如下:

html_str = ret_html()
soup = BeautifulSoup(html_str, 'lxml')
# print(soup.find('a'))
print(soup.find(attrs={'class': 'cta'}))

find()方法還提供了一些特殊的參數(shù),便于直接查找,例如可以使用id=xxx,查找屬性中包含 id的標(biāo)簽,可以使用class_=xxx,查找屬性中包含class的標(biāo)簽。

print(soup.find(class_='cta'))

find()方法成對(duì)出現(xiàn)的是find_all()方法,看名稱就能知道其返回結(jié)果收是全部匹配標(biāo)簽,語法格式如下:

obj.find_all(name,attrs,recursive,text,limit)

其中重點(diǎn)說明一下limit參數(shù),它表示最多返回的匹配數(shù)量,find()方法可以看作limit=1,這樣就變得容易理解了。

到此這篇關(guān)于Python爬蟲網(wǎng)頁元素定位術(shù)的文章就介紹到這了,更多相關(guān)Python元素定位內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • tensorflow 獲取變量&打印權(quán)值的實(shí)例講解

    tensorflow 獲取變量&打印權(quán)值的實(shí)例講解

    今天小編就為大家分享一篇tensorflow 獲取變量&打印權(quán)值的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Flask??response?對(duì)象詳情

    Flask??response?對(duì)象詳情

    在?Flask?中,響應(yīng)使用?Response?對(duì)象表示,響應(yīng)報(bào)文中的大部分內(nèi)容由服務(wù)器處理,一般情況下,我們只負(fù)責(zé)返回主體內(nèi)容即可。在之前的文章中,我們了解到?Flask?會(huì)先匹配請(qǐng)求?url?的路由,調(diào)用對(duì)應(yīng)的視圖函數(shù),視圖函數(shù)的返回值構(gòu)成了響應(yīng)報(bào)文的主體內(nèi)容。
    2021-11-11
  • python切片的步進(jìn)、添加、連接簡單操作示例

    python切片的步進(jìn)、添加、連接簡單操作示例

    這篇文章主要介紹了python切片的步進(jìn)、添加、連接簡單操作,結(jié)合實(shí)例形式分析了Python切片運(yùn)算的常見操作技巧,需要的朋友可以參考下
    2019-07-07
  • python繪圖時(shí),坐標(biāo)軸負(fù)號(hào)顯示不出來的解決

    python繪圖時(shí),坐標(biāo)軸負(fù)號(hào)顯示不出來的解決

    這篇文章主要介紹了python繪圖時(shí),坐標(biāo)軸負(fù)號(hào)顯示不出來的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • python GUI庫圖形界面開發(fā)之PyQt5布局控件QHBoxLayout詳細(xì)使用方法與實(shí)例

    python GUI庫圖形界面開發(fā)之PyQt5布局控件QHBoxLayout詳細(xì)使用方法與實(shí)例

    這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5布局控件QHBoxLayout詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下
    2020-03-03
  • Python+Selenium實(shí)現(xiàn)自動(dòng)填寫問卷

    Python+Selenium實(shí)現(xiàn)自動(dòng)填寫問卷

    本文主要介紹了Python+Selenium實(shí)現(xiàn)自動(dòng)填寫問卷,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • OpenCV圖像顏色反轉(zhuǎn)算法詳解

    OpenCV圖像顏色反轉(zhuǎn)算法詳解

    這篇文章主要介紹了OpenCV圖像顏色反轉(zhuǎn)算法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Anaconda配置各版本Pytorch的實(shí)現(xiàn)

    Anaconda配置各版本Pytorch的實(shí)現(xiàn)

    本文是整理目前全版本pytorch深度學(xué)習(xí)環(huán)境配置指令,以下指令適用Windows操作系統(tǒng),在Anaconda Prompt中運(yùn)行,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • python scipy 稀疏矩陣的使用說明

    python scipy 稀疏矩陣的使用說明

    這篇文章主要介紹了python scipy 稀疏矩陣的使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 使用pyinstaller打包python PyQt5程序

    使用pyinstaller打包python PyQt5程序

    當(dāng)你寫好一個(gè)python應(yīng)用以后(有可能是命令行,有可能是GUI),你或許希望分享給他人使用,而別人可能并沒有python環(huán)境,那么我們需要尋找一種方法生成可執(zhí)行文件(比如Windows上的exe或macOs上的app)
    2021-10-10

最新評(píng)論