最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

官方站點(diǎn):

www.crummy.com/software/BeautifulSoup/

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

模塊的安裝及其簡(jiǎn)單:

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

未來(lái)安裝任何模塊,都盡量使用國(guó)內(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ì)象說(shuō)明

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

BeautifulSoup 對(duì)象

該對(duì)象本身就代表整個(gè) HTML 頁(yè)面,而且實(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)頁(yè)標(biāo)簽,或者叫做網(wǎng)頁(yè)元素對(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)頁(yè)中的 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)簽名稱

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

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

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

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

以上代碼的所有輸出如下所示,可以任意選擇標(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()方法來(lái)獲取標(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()也是相同的效果,不過(guò)使用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)頁(yè)中找到指定對(duì)象,

該方法的語(yǔ)法格式如下:

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

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

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

例如我們繼續(xù)在上文請(qǐng)求的網(wǎng)頁(yè)中,查找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)簽,語(yǔ)法格式如下:

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

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

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

相關(guān)文章

  • 聊聊Python中的浮點(diǎn)數(shù)運(yùn)算不準(zhǔn)確問(wèn)題

    聊聊Python中的浮點(diǎn)數(shù)運(yùn)算不準(zhǔn)確問(wèn)題

    這篇文章主要介紹了聊聊Python中的浮點(diǎn)數(shù)運(yùn)算不準(zhǔn)確問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Python中的整除和取模實(shí)例

    Python中的整除和取模實(shí)例

    這篇文章主要介紹了Python中的整除和取模實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Scrapy基于selenium結(jié)合爬取淘寶的實(shí)例講解

    Scrapy基于selenium結(jié)合爬取淘寶的實(shí)例講解

    今天小編就為大家分享一篇Scrapy基于selenium結(jié)合爬取淘寶的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python內(nèi)存泄漏排查技巧總結(jié)

    python內(nèi)存泄漏排查技巧總結(jié)

    這篇文章主要給大家分享了python內(nèi)存泄漏排查技巧總結(jié),工作過(guò)程中服務(wù)難免遇到內(nèi)存泄漏問(wèn)題,下面文章就給大家總結(jié)一些排查下技巧,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2021-12-12
  • Python3搜索及替換文件中文本的方法

    Python3搜索及替換文件中文本的方法

    這篇文章主要介紹了Python3搜索及替換文件中文本的方法,涉及Python操作文件及字符串的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • PyTorch?Autograd的核心原理和功能深入探究

    PyTorch?Autograd的核心原理和功能深入探究

    本文深入探討了PyTorch中Autograd的核心原理和功能,從基本概念、Tensor與Autograd的交互,到計(jì)算圖的構(gòu)建和管理,再到反向傳播和梯度計(jì)算的細(xì)節(jié),最后涵蓋了Autograd的高級(jí)特性
    2024-01-01
  • 詳解python中的Turtle函數(shù)庫(kù)

    詳解python中的Turtle函數(shù)庫(kù)

    這篇文章主要介紹了python中的Turtle函數(shù)庫(kù),包括函數(shù)庫(kù)的引用方式,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • 解決uWSGI的編碼問(wèn)題詳解

    解決uWSGI的編碼問(wèn)題詳解

    最近在用Flask 寫(xiě)的應(yīng)用通過(guò) Supervisor+uWSGI 部署到正式服務(wù)器上時(shí)出現(xiàn)了錯(cuò)誤,通過(guò)查找相關(guān)的資料終于解決了,所以想著分享出來(lái)給大家,下面這篇文章主要介紹了解決uWSGI的編碼問(wèn)題的相關(guān)資料,需要的朋友可以參考下。
    2017-03-03
  • Python安裝Matplotlib包完整步驟記錄

    Python安裝Matplotlib包完整步驟記錄

    這篇文章主要給大家介紹了關(guān)于Python安裝Matplotlib包的相關(guān)資料,Matplotlib是一個(gè)Python 2D繪圖庫(kù),它以多種硬拷貝格式和跨平臺(tái)的交互式環(huán)境生成出版物質(zhì)量的圖形,需要的朋友可以參考下
    2023-12-12
  • 利用keras加載訓(xùn)練好的.H5文件,并實(shí)現(xiàn)預(yù)測(cè)圖片

    利用keras加載訓(xùn)練好的.H5文件,并實(shí)現(xiàn)預(yù)測(cè)圖片

    今天小編就為大家分享一篇利用keras加載訓(xùn)練好的.H5文件,并實(shí)現(xiàn)預(yù)測(cè)圖片,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01

最新評(píng)論

青阳县| 海城市| 和硕县| 濮阳市| 西吉县| 盈江县| 沾益县| 尼勒克县| 奎屯市| 温泉县| 蓬安县| 石首市| 闽清县| 元氏县| 荣昌县| 兰西县| 卓尼县| 玉环县| 天镇县| 灵川县| 鸡东县| 尼玛县| 安仁县| 定襄县| 商水县| 尖扎县| 镇江市| 姚安县| 西丰县| 绥芬河市| 河北省| 景德镇市| 那曲县| 寿阳县| 永顺县| 石河子市| 诏安县| 什邡市| 聂拉木县| 万荣县| 芮城县|