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

Python爬蟲之解析HTML頁(yè)面詳解

 更新時(shí)間:2023年04月29日 10:09:57   作者:互聯(lián)小助手  
本文介紹了Python中用于解析HTML頁(yè)面的重要工具之一——BeautifulSoup庫(kù),詳細(xì)講解了BeautifulSoup庫(kù)的基本使用方法、標(biāo)簽選擇器、CSS選擇器、正則表達(dá)式、遍歷文檔樹等內(nèi)容,并結(jié)合實(shí)例代碼展示了BeautifulSoup庫(kù)的應(yīng)用場(chǎng)景

用Python解析HTML頁(yè)面

在網(wǎng)絡(luò)爬取的過(guò)程中,我們通常需要對(duì)所爬取的頁(yè)面進(jìn)行解析,從中提取我們需要的數(shù)據(jù)。網(wǎng)頁(yè)的結(jié)構(gòu)通常是由 HTML 標(biāo)簽所組成的,通過(guò)對(duì)這些標(biāo)簽的解析,可以得到網(wǎng)頁(yè)中所包含的有用信息。在 Python 中,有三種常見的 HTML 解析方式:正則表達(dá)式解析、XPath 解析和 CSS 選擇器解析。本文將為大家介紹這三種解析方式的基本使用方法。

HTML 頁(yè)面的結(jié)構(gòu)

在講解 HTML 解析方式之前,我們需要先了解一下 HTML 頁(yè)面的基本結(jié)構(gòu)。當(dāng)我們?cè)跒g覽器中打開一個(gè)網(wǎng)站,并通過(guò)鼠標(biāo)右鍵菜單選擇“顯示網(wǎng)頁(yè)源代碼”菜單項(xiàng)時(shí),就可以看到網(wǎng)頁(yè)對(duì)應(yīng)的 HTML 代碼。HTML 代碼通常由標(biāo)簽、屬性和文本組成。標(biāo)簽用于承載頁(yè)面要顯示的內(nèi)容,屬性用于補(bǔ)充標(biāo)簽的信息,而文本則是標(biāo)簽所顯示的內(nèi)容。下面是一個(gè)簡(jiǎn)單的 HTML 頁(yè)面代碼結(jié)構(gòu)示例:

<!DOCTYPE html>
<html>
    <head>
        <!-- head 標(biāo)簽中的內(nèi)容不會(huì)在瀏覽器窗口中顯示 -->
        <title>這是頁(yè)面標(biāo)題</title>
    </head>
    <body>
        <!-- body 標(biāo)簽中的內(nèi)容會(huì)在瀏覽器窗口中顯示 -->
        <h1>這是一級(jí)標(biāo)題</h1>
        <p>這是一段文本</p>
    </body>
</html>

在這個(gè) HTML 頁(yè)面代碼示例中,<!DOCTYPE html>是文檔類型聲明,<html>標(biāo)簽是整個(gè)頁(yè)面的根標(biāo)簽,<head><body><html>標(biāo)簽的子標(biāo)簽,放在<body>標(biāo)簽下的內(nèi)容會(huì)顯示在瀏覽器窗口中,這部分內(nèi)容是網(wǎng)頁(yè)的主體;放在<head>標(biāo)簽下的內(nèi)容不會(huì)在瀏覽器窗口中顯示,但是卻包含了頁(yè)面重要的元信息,通常稱之為網(wǎng)頁(yè)的頭部。HTML 頁(yè)面大致的代碼結(jié)構(gòu)如下所示:

<!DOCTYPE html>
<html>
    <head>
        <!-- 頁(yè)面的元信息,如字符編碼、標(biāo)題、關(guān)鍵字、媒體查詢等 -->
    </head>
    <body>
        <!-- 頁(yè)面的主體,顯示在瀏覽器窗口中的內(nèi)容 -->
    </body>
</html>

在 HTML 頁(yè)面中,標(biāo)簽、層疊樣式表(CSS)和 JavaScript 是構(gòu)成頁(yè)面的三要素。標(biāo)簽用來(lái)承載頁(yè)面要顯示的內(nèi)容,CSS 負(fù)責(zé)對(duì)頁(yè)面的渲染,而 JavaScript 用來(lái)控制頁(yè)面的交互式行為。要實(shí)現(xiàn) HTML 頁(yè)面的解析,可以使用 XPath 的語(yǔ)法,它原本是 XML 的一種查詢語(yǔ)法,可以根據(jù) HTML 標(biāo)簽的層次結(jié)構(gòu)提取標(biāo)簽中的內(nèi)容或標(biāo)簽屬性;此外,也可以使用 CSS 選擇器來(lái)定位頁(yè)面元素,就跟用 CSS 渲染頁(yè)面元素是同樣的道理。

XPath 解析

XPath 是在 XML(eXtensible Markup Language)文檔中查找信息的一種語(yǔ)法,XML 跟 HTML 類似也是一種用標(biāo)簽承載數(shù)據(jù)的標(biāo)簽語(yǔ)言,不同之處在于 XML 的標(biāo)簽是可擴(kuò)展的,可以自定義的,而且 XML 對(duì)語(yǔ)法有更嚴(yán)格的要求。XPath 使用路徑表達(dá)式來(lái)選取 XML 文檔中的節(jié)點(diǎn)或者節(jié)點(diǎn)集,這里所說(shuō)的節(jié)點(diǎn)包括元素、屬性、文本、命名空間、處理指令、注釋、根節(jié)點(diǎn)等。

XPath 的路徑表達(dá)式是一種類似于文件路徑的語(yǔ)法,可以通過(guò)“/”和“//”來(lái)選取節(jié)點(diǎn)。單斜杠“/”表示選取根節(jié)點(diǎn),雙斜杠“//”表示選取任意位置的節(jié)點(diǎn)。例如,“/bookstore/book”表示選取根節(jié)點(diǎn) bookstore 下的所有 book 子節(jié)點(diǎn),“//title”表示選取任意位置的 title 節(jié)點(diǎn)。

XPath 還可以使用謂語(yǔ)(Predicate)來(lái)過(guò)濾節(jié)點(diǎn)。謂語(yǔ)是被嵌在方括號(hào)中的表達(dá)式,它可以是一個(gè)數(shù)字、一個(gè)比較運(yùn)算符或一個(gè)函數(shù)調(diào)用。例如,“/bookstore/book[1]”表示選取 bookstore 的第一個(gè)子節(jié)點(diǎn) book,“//book[@lang]”表示選取所有具有 lang 屬性的 book 節(jié)點(diǎn)。

XPath 的函數(shù)包括字符串、數(shù)學(xué)、邏輯、節(jié)點(diǎn)、序列等函數(shù),這些函數(shù)可以用于選取節(jié)點(diǎn)、計(jì)算值、轉(zhuǎn)換數(shù)據(jù)類型等操作。例如,“string-length(string)”函數(shù)可以返回字符串的長(zhǎng)度,“count(node-set)”函數(shù)可以返回節(jié)點(diǎn)集中節(jié)點(diǎn)的個(gè)數(shù)。

下面我們通過(guò)一個(gè)例子來(lái)說(shuō)明如何使用 XPath 對(duì)頁(yè)面進(jìn)行解析。假設(shè)我們有如下的 XML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book>
      <title lang="eng">Harry Potter</title>
      <price>29.99</price>
    </book>
    <book>
      <title lang="zh">Learning XML</title>
      <price>39.95</price>
    </book>
</bookstore>

對(duì)于這個(gè) XML 文件,我們可以用如下所示的 XPath 語(yǔ)法獲取文檔中的節(jié)點(diǎn)。

路徑表達(dá)式結(jié)果
/bookstore選取根元素 bookstore。注意:假如路徑起始于正斜杠( / ),則此路徑始終代表到某元素的絕對(duì)路徑!
//book選取所有 book 子元素,而不管它們?cè)谖臋n中的位置。
//@lang選取名為 lang 的所有屬性。
/bookstore/book[1]選取 bookstore 的第一個(gè)子節(jié)點(diǎn) book。

CSS 選擇器解析

CSS 選擇器是一種基于 HTML 標(biāo)簽的屬性和關(guān)系來(lái)定位元素的方法。它可以根據(jù) HTML 標(biāo)簽的層次結(jié)構(gòu)、類名、id 等屬性來(lái)定位元素。在 Python 中,我們可以使用 BeautifulSoup 庫(kù)來(lái)進(jìn)行 CSS 選擇器解析。

下面我們通過(guò)一個(gè)例子來(lái)說(shuō)明如何使用 CSS 選擇器對(duì)頁(yè)面進(jìn)行解析。假設(shè)我們有如下的 HTML 代碼:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>這是頁(yè)面標(biāo)題</title>
</head>
<body>
	<div class="content">
		<h1>這是一級(jí)標(biāo)題</h1>
		<p>這是一段文本</p>
	</div>
	<div class="footer">
		<p>版權(quán)所有 ? 2021</p>
	</div>
</body>
</html>

我們可以使用如下所示的 CSS 選擇器語(yǔ)法來(lái)選取頁(yè)面元素。

選擇器結(jié)果
div.content選取 class 為 content 的 div 元素。
h1選取所有的 h1 元素。
div.footer p選取 class 為 footer 的 div 元素下的所有 p 元素。
[href]選取所有具有 href 屬性的元素。

正則表達(dá)式解析

正則表達(dá)式是一種用來(lái)匹配、查找和替換文本的工具,它可以用于對(duì) HTML 頁(yè)面進(jìn)行解析。在 Python 中,我們可以使用 re 模塊來(lái)進(jìn)行正則表達(dá)式解析。

下面我們通過(guò)一個(gè)例子來(lái)說(shuō)明如何使用正則表達(dá)式對(duì)頁(yè)面進(jìn)行解析。假設(shè)我們有如下的 HTML 代碼:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>這是頁(yè)面標(biāo)題</title>
</head>
<body>
	<div class="content">
		<h1>這是一級(jí)標(biāo)題</h1>
		<p>這是一段文本</p>
	</div>
	<div class="footer">
		<p>版權(quán)所有 ? 2021</p>
	</div>
</body>
</html>

我們可以使用如下所示的正則表達(dá)式來(lái)選取頁(yè)面元素。

import re
html = '''
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>這是頁(yè)面標(biāo)題</title>
</head>
<body>
	<div class="content">
		<h1>這是一級(jí)標(biāo)題</h1>
		<p>這是一段文本</p>
	</div>
	<div class="footer">
		<p>版權(quán)所有 ? 2021</p>
	</div>
</body>
</html>
'''
pattern = re.compile(r'<div class="content">.*?<h1>(.*?)</h1>.*?<p>(.*?)</p>.*?</div>', re.S)
match = re.search(pattern, html)
if match:
    title = match.group(1)
    text = match.group(2)
    print(title)
    print(text)

以上代碼中,我們使用 re 模塊的 compile 方法來(lái)編譯正則表達(dá)式,然后使用 search 方法來(lái)匹配 HTML 代碼。在正則表達(dá)式中,“.*?”表示非貪婪匹配,也就是匹配到第一個(gè)符合條件的標(biāo)簽就停止匹配,而“re.S”表示讓“.”可以匹配包括換行符在內(nèi)的任意字符。最后,我們使用 group 方法來(lái)獲取匹配的結(jié)果。

總結(jié)

本文介紹了 Python 中常用的三種 HTML 解析方式:XPath 解析、CSS 選擇器解析和正則表達(dá)式解析。在具體的應(yīng)用過(guò)程中,我們可以根據(jù)需要選擇不同的解析方式。XPath 解析適用于對(duì) HTML 頁(yè)面的層次結(jié)構(gòu)進(jìn)行解析,能夠比較方便地定位頁(yè)面元素;CSS 選擇器解析適用于對(duì) HTML 頁(yè)面的類名、id 等屬性進(jìn)行解析,可以快速定位元素;正則表達(dá)式解析適用于對(duì) HTML 頁(yè)面的標(biāo)簽和文本進(jìn)行解析,可以靈活地處理頁(yè)面元素。希望本文能夠?qū)Υ蠹疫M(jìn)行 HTML 解析方面的學(xué)習(xí)和實(shí)踐有所幫助。

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

相關(guān)文章

  • 深度學(xué)習(xí)的MNIST手寫數(shù)字?jǐn)?shù)據(jù)集識(shí)別方式(準(zhǔn)確率99%,附代碼)

    深度學(xué)習(xí)的MNIST手寫數(shù)字?jǐn)?shù)據(jù)集識(shí)別方式(準(zhǔn)確率99%,附代碼)

    這篇文章主要介紹了深度學(xué)習(xí)的MNIST手寫數(shù)字?jǐn)?shù)據(jù)集識(shí)別方式(準(zhǔn)確率99%,附代碼),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 玩轉(zhuǎn)python爬蟲之爬取糗事百科段子

    玩轉(zhuǎn)python爬蟲之爬取糗事百科段子

    這篇文章主要介紹了python爬蟲爬取糗事百科段子,詳細(xì)介紹下,如何來(lái)抓取到糗事百科里面的指定內(nèi)容,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Python 函數(shù)繪圖及函數(shù)圖像微分與積分

    Python 函數(shù)繪圖及函數(shù)圖像微分與積分

    今天小編就為大家分享一篇Python 函數(shù)繪圖及函數(shù)圖像微分與積分,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • python實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能

    python實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 教你使用Pycharm配置遠(yuǎn)程Jupyter

    教你使用Pycharm配置遠(yuǎn)程Jupyter

    在pycharm里配置了遠(yuǎn)程的Python解釋器,然后在使用過(guò)程中,發(fā)現(xiàn)pycharm原來(lái)是可以使用Jupyter的文件,而且還可以配置遠(yuǎn)程的Jupyter環(huán)境,今天試了一下,一開始還是走了一些坑,今天梳理一下,需要的朋友可以參考下
    2022-05-05
  • Python中實(shí)現(xiàn)地圖可視化的方法小結(jié)

    Python中實(shí)現(xiàn)地圖可視化的方法小結(jié)

    Python提供了多個(gè)強(qiáng)大的庫(kù),如Folium、Matplotlib、Geopandas等,使得創(chuàng)建漂亮而具有信息量的地圖變得簡(jiǎn)單而靈活,本文將詳細(xì)介紹如何使用這些庫(kù)繪制漂亮的地圖,感興趣的可以了解下
    2023-12-12
  • Python操作Access數(shù)據(jù)庫(kù)基本步驟分析

    Python操作Access數(shù)據(jù)庫(kù)基本步驟分析

    這篇文章主要介紹了Python操作Access數(shù)據(jù)庫(kù)基本步驟,結(jié)合實(shí)例形式詳細(xì)分析了Python針對(duì)access操作的具體步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-09-09
  • Python入門之模塊和包用法詳解

    Python入門之模塊和包用法詳解

    這篇文章主要為大家詳細(xì)介紹一下Python中的包與模塊的使用,文中的示例講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-07-07
  • 高效使用Python字典的清單

    高效使用Python字典的清單

    字典(dict)對(duì)象是 Python 最常用的數(shù)據(jù)結(jié)構(gòu),本文給大家介紹使用Python字典的清單,感興趣的朋友一起看看吧
    2018-04-04
  • 對(duì)numpy中array和asarray的區(qū)別詳解

    對(duì)numpy中array和asarray的區(qū)別詳解

    下面小編就為大家分享一篇對(duì)numpy中array和asarray的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04

最新評(píng)論

天台县| 潍坊市| 安图县| 广州市| 皮山县| 云南省| 泰顺县| 旬阳县| 商丘市| 台南市| 涪陵区| 威远县| 甘肃省| 西乌| 南充市| 昔阳县| 利川市| 祥云县| 贵州省| 宝兴县| 全州县| 山阳县| 湘乡市| 大方县| 舞阳县| 子长县| 高清| 天全县| 九龙坡区| 淮滨县| 建昌县| 景宁| 蕲春县| 江门市| 青岛市| 星子县| 云浮市| 聊城市| 翼城县| 阳东县| 江油市|