解析庫使用

2021-08-25 13:55:57 字數 3539 閱讀 4521

xpath通過標籤()提取資訊→更適用於爬蟲方法一:處理文字

from lxml import etree

text = '''

class="carousel-indicators">

"#mycarousel" data-slide-to="0"

class="active">

"#mycarousel" data-slide-to="1"

class="">

"#mycarousel" data-slide-to="2"

class="">

"#mycarousel" data-slide-to="3"

class="">

"#mycarousel" data-slide-to="4"

class="">

'''html = etree.html(text)

如果想輸出html的文字內容,可以使用result = etree.tostring(html).decode('utf-8')由於tostring()返回的物件為bytes型別,所以這裡使用decode(『utf-8』)進行解碼

方法二:處理檔案

from lxml import etree

html = etree.parse('./test.html', etree.htmlparser)

常用規則

/ : 選取當前節點的直接子節點

text():定位標籤內容 例:

html/a/b/text()

abcb>

a>

html>

結果:abc

@選擇標籤屬性:標籤[@屬性=屬性值]

//選取當前節點的所有子孫節點://li@[class='hidden-xs']/a/@href

結果:www.baidu.comcontains(attr, value):屬性多值匹配,attr為屬性名,value為屬性值,只要value在attr中即可匹配成功

按序選擇:

//li[1]             #選取第乙個節點,這裡的序號是從1開始

//li[last()] #選取最後乙個節點

//li[position()<4] #選取前三個節點

//li[last()-3] #選取倒數第四個節點

提取
from lxml import etree

html = etree.parse('./test.html', etree.htmlparser)

result = html.xpath('//li[@name='show' and contains(@class, 'li')]')

html = '''

class="carousel-indicators">

"#mycarousel" data-slide-to="0"

class="active">

"#mycarousel" data-slide-to="1"

class="">

"#mycarousel" data-slide-to="2"

class="">

"#mycarousel" data-slide-to="3"

class="">

"#mycarousel" data-slide-to="4"

class="">

'''from bs4 import beautifulsoup

soup = beautifulsoup(html, 'lxml')

這樣就構造了乙個beautifulsoup物件,在初始化beautifulsoup物件時會自動更正字串內的html格式

使用soup.prettify()可以將要解析的字串以標準縮排的格式輸出

假設soup為乙個已初始化的beautifulsoup物件

**功能

soup.a選取名稱為a的節點

soup.a.string選取節點a的內容

soup.a.name選取節點a的名稱

soup.a['name'] / soup.a.attrs['name']選取節點a的name屬性的值,返回str型別

soup.a['class']選取節點a的class屬性的值,返回list型別

soup.a.contents選取節點a的內容及直接子節點

soup.a.childrem同上

soup.a.descendants選取節點a的所有子孫節點

soup.a.parent選取節點a的父節點

soup.a.parents選取節點a的祖先節點,返回生成器型別

soup.a.next_sibling選取節點a的下乙個同級節點

soup.a.previous_sibling選取節點a的上乙個同級節點

soup.a.next_siblings選取節點a之後的同級節點,返回生成器型別

soup.a.previous_siblings選取節點a之前的同級節點, 返回生成器型別

所有返回型別為生成器的選擇結果可以使用遍歷來獲取其中內容:

for i, child in enumerate(soup.a.descendants):

print(i, child)

這樣就將索引和內容同時輸出

find_all()

find_all(name='li'):選取節點名稱為li的節點

find_all(attrs=):選取』id』屬性的值為』a』的節點,attrs的引數必須是字典型別

find_all(text=re.compile('abc')):選取匹配正規表示式的節點文字組成的列表

find()

選取符合選取規則的第乙個節點

find_parents()

選取所有祖先節點

find_parent()

選取直接父節點

find_next_siblings(), find_next_sibling()

find_previous_siblings(), find_previous_sibling()

find_all_next(), find_next()

find_all_previous(), find_previous()

解析庫的使用

xpath,全稱xml path language,即xml路徑語言,它是一門在xml文件中查詢資訊的語言。它最初是用來搜尋xml文件的,但是它同樣使用於html文件的搜尋。所以在做爬蟲時,我們完全可以使用xpath來做相應的資訊抽取。表 達 式 描 述 nodename選取此節點的所有節點 從當前...

使用cJSON庫解析JSON

cjson是乙個基於c的json解析庫,這個庫非常簡單,只有cjson.c和cjson.h兩個檔案,支援json的解析和封裝,需要呼叫時,只需要 include cjson.h 就可以使用了,json官方 json json字串 這個json物件只有兩個鍵值對,鍵name對應字串andy,鍵age對...

Python解析庫(一) 使用XPath

xpath最初是用來搜尋xml文件的,但是同樣可以用來解析html文件 表示式 描述 nodename 選取此節點的所有子節點 從當前節點擊取直接子節點 從當前節點擊取子孫節點 選取當前節點 選取當前節點的父節點 選取屬性 例如 title lang eng 這是乙個xpath規則,他代表選取所有名...