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規則,他代表選取所有名...