首頁 > 軟體

python爬蟲教學之bs4解析和xpath解析詳解

2022-02-28 13:05:29

bs4解析

原理:

1.範例化一個BeautifulSoup物件,並且將頁面原始碼資料載入到該物件中

2.通過呼叫BeautifulSoup物件中相關的屬性或者方法進行標籤定位和資料提取

如何範例化BeautifulSoup物件:

from bs4 import BeautifulSoup

BeautifulSoup(引數一,引數二)

引數一為檔案描述符,引數二為解析器,一般為’lxml’

一物件的範例化:

1.將原生的html檔案中的資料載入到該物件中

fp = open( './test.html','r',encoding='utf-8')
soup=BeautifulSoup(fp,'lxml')

2.將網際網路上獲取的頁面原始碼載入到該物件中

page_text =response.text
soup=BeatifulSoup(page_text,'lxml')

soup指初始化的BeautifulSoup物件

用於資料解析的方法和屬性:

1.soup.tagName:返回的是檔案中第一次出現的tagName對應的標籤

2.soup.find():

(1).find( ‘tagName’):等同於soup.tagName

(2).屬性定位:soup.find(‘div’,class_/id/或者其他屬性=‘song’)

定位到< div class=“song”>/< div id=“song”>的標籤下

class如果沒有加_則代表關鍵字

3.soup.find_all(‘tagName’):返回符合要求的所有標籤(列表)

soup物件:

<div class="tang">
    <ul>
        <li><a href="http://www.baidu.com" rel="external nofollow"  title= "ging">清明時節雨紛紛,路上行人慾斷魂,借問酒家何處有,牧童遙指杏花村</a></1i>
        <li><a href="http://www.163.com" rel="external nofollow"  title="qin">秦時明月漢時關,萬里長征人未還,但使龍城飛將在,不教胡馬度陰山</a></1i>
        <li><a href=" http://ww.126.com" rel="external nofollow" alt="qi ">歧王宅裡尋常見,崔九堂前幾度聞,正是江南好風景,落花時節又逢君</a></li>
        <li><a href="http: //www.sina.com" rel="external nofollow"  class="du">杜甫</a></li>
        <li><a href="http://www.dudu.com" rel="external nofollow"  class="du">杜牧</a></li>
        <li><b>杜小月</b></li>
        <li><i>度蜜月</i></li>
        <li><a href="http://ww.hana.com」id=" rel="external nofollow" feng">鳳凰臺上鳳凰遊,鳳去臺空江自流,吳宮花草埋幽徑,晉代衣冠成古丘</a></li>
    </ul>
</div>

4.select:

- select(‘某種選擇器(id,class,標籤…選擇器)’),返回的是一個列表。

標籤什麼都不加,class前面加. id前面加#

層級選擇器:

>表示的是一個層級;空格表示的多個層級

     soup.select( '.tang > ul > li > a') 
     soup.select( '.tang >ul a')
     結果為:[<a href="http://www.baidu.com" title= "ging">清明時節雨紛紛,路上行人慾斷魂,借問酒家何處有,牧童遙指杏花村</a>,
     <a href="http://www.163.com" title="qin">秦時明月漢時關,萬里長征人未還,但使龍城飛將在,不教胡馬度陰山</a>,
     <a href=" http://ww.126.com"alt="qi ">歧王宅裡尋常見,崔九堂前幾度聞,正是江南好風景,落花時節又逢君</a>,
     <a href="http: //www.sina.com" class="du">杜甫</a>,
     <a href="http://www.dudu.com" class="du">杜牧</a>,
    <a href="http://ww.hana.com」id="feng">鳳凰臺上鳳凰遊,鳳去臺空江自流,吳宮花草埋幽徑,晉代衣冠成古丘</a>]

5.獲取標籤之間的文字資料:

-soup.a.text/string/get_text()

-text/get_text():可以獲取某一個標籤中所有的文字內容

-string:只可以獲取該標籤下面直系的文字內容

6.獲取標籤中屬性值:

soup.a[‘屬性值’]

print(soup.select( '.tang > ul > li > a') [0]['href'])
結果:
www.baidu.com

xpath解析

最常用且最便捷高效的一種解析方式。通用性。

xpath解析原理:

1.範例化一個etree的物件,且需要將被解析的頁面原始碼資料載入到該物件中。

2呼叫etree物件中的xpath方法結合著xpath表示式實現標籤的定位和內容的捕獲。

範例化一個etree物件:

from lxml import etree

-1.將原生的html檔案中的原始碼資料載入到etree物件中:

etree.parse(filePath)

-2.可以將從網際網路上獲取的原始碼資料載入到該物件中

etree.HTML( 'page_text')

xpath( ‘xpath表示式’)

xpath表示式:(返回一個列表)

-/:表示的是從根節點開始定位。表示的是一個層級。

-//:表示的是多個層級。可以表示從任意位置開始定位。

-屬性定位://div[@class=‘song’] tag[@attrname=‘attrvalue’]

-索引定位://div[@class=‘song’]/p[3]

索引從1開始的

取文字:

  • /text()獲取的是標籤中直系的文字內容
  • //text(標籤中非直系的文字內容(所有的文字內容)

取屬性:

  • /@attrName
  • eg:/img/@src
  • ./表示定位到當前位置(區域性解析)

多個xpath之間用|分割:

  • tree.xpath(’//div[@class=‘song’]/p[3] | //div[@class=‘song’]’)

總結

到此這篇關於python爬蟲教學之bs4解析和xpath解析的文章就介紹到這了,更多相關python bs4和xpath解析內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com