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

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

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

實(shí)戰(zhàn)場景

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

本文核心使用到的是 Beautiful Soup 模塊,因此我們用來做測試采集的站點(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 對象樹,然后讓我們從對象樹中提取數(shù)據(jù)。

模塊的安裝及其簡單:

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

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

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

基礎(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 對象時,在 BeautifulSoup 類的構(gòu)造函數(shù)中傳遞的兩個參數(shù),一個是待解析的字符串,另一個是解析器,官方建議的是 lxml,因其解析速度快。

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

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

BeautifulSoup 模塊的對象說明

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

BeautifulSoup 對象

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

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

Tag 對象

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

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))

此時得到的可不是一個字符串,而是一個 Tag 對象。

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

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

獲取標(biāo)簽名稱

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

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

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

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

print(soup.img)  # 獲取網(wǎng)頁第一個 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 對象

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

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

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

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

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

<class 'bs4.element.NavigableString'>

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

除了使用對象的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()可以增加一個分隔符,例如上述代碼的&符號,還可以使用,strip=True 參數(shù)去除空格。

Comment 對象

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

find() 方法和 find_all() 方法

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

該方法的語法格式如下:

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

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

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

例如我們繼續(xù)在上文請求的網(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()方法成對出現(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    解決uWSGI的編碼問題詳解

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

    Python安裝Matplotlib包完整步驟記錄

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

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

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

最新評論

赣榆县| 措美县| 洛南县| 海晏县| 勃利县| 蒲江县| 福贡县| 福泉市| 哈巴河县| 巨野县| 桂平市| 外汇| 象山县| 老河口市| 建宁县| 东明县| 溧水县| 长沙市| 望江县| 吴江市| 嘉祥县| 三亚市| 光山县| 洪江市| 嘉鱼县| 宾川县| 英山县| 棋牌| 会宁县| 万载县| 岱山县| 依兰县| 汉阴县| 无棣县| 华阴市| 绍兴市| 凉山| 长沙县| 都兰县| 孝昌县| 砚山县|