1.pyquery庫的了解
pyquery庫是jQuery的Python實現(xiàn)房轿,能夠以jQuery的語法來操作解析 HTML 文檔聚唐,易用性和解析速度都很好。
1.1 pyquery庫的安裝方法:
在cmd輸入:pip install pyquery
1.2 pyquery庫的引用:(注意大小寫)
from pyquery import PyQuery as pq
2.pyquery初始化
像BeautifulSoup一樣佑笋,PyQuery初始化的時候也需要傳入HTML數(shù)據(jù)源來初始化一個操作對象寺滚,它的初始化方式有多種,比如直接傳入字符串氨淌,傳入URL泊愧,傳文件名。下面我們來詳細介紹一下盛正。
2.1直接傳入字符串
在這里我們首先引入了PyQuery這個對象拼卵,取別名為pq,然后聲明了一個長HTML字符串蛮艰,當作參數(shù)傳遞給PyQuery腋腮,這樣就成功完成了初始化,然后接下來將初始化的對象傳入CSS選擇器壤蚜,在這個實例中我們傳入li節(jié)點即寡,這樣就可以選擇所有的li節(jié)點,打印輸出可以看到所有的li節(jié)點的HTML文本袜刷。
html = '''
<div>
<ul>
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
>>> from pyquery import PyQuery as pq
>>> doc=pq(html)
>>> print(doc("li"))
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
2.2傳入URL
初始化的參數(shù)不僅可以以字符串的形式傳遞聪富,還可以傳入網(wǎng)頁的URL,在這里只需要指定參數(shù)為url即可著蟹。
>>> from pyquery import PyQuery as pq
>>> doc=pq(url="http://www.baidu.com")
>>> print(doc("head"))#輸出head標簽
<head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=Edge"/><meta content="always" name="referrer"/><link rel="stylesheet" type="text/css" /><title>????o|??????????? ?°±??¥é??</title></head>
這樣的話PyQuery會首先請求這個URL墩蔓,然后用得到的HTML內(nèi)容完成初始化梢莽,其實就相當于我們用網(wǎng)頁的源代碼以字符串的形式傳遞給PyQuery來初始化。
它與下面的功能是相同的:
>>> from pyquery import PyQuery as pq
>>> import requests
>>> doc=pq(requests.get("http://www.baidu.com").text)
>>> print(doc("head"))
<head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=Edge"/><meta content="always" name="referrer"/><link rel="stylesheet" type="text/css" /><title>????o|??????????? ?°±??¥é??</title></head>
>>>
2.3傳文件名
當然除了傳遞一個URL奸披,還可以傳遞本地的文件名昏名,參數(shù)指定為filename即可。
當然在這里需要有一個本地HTML文件demo.html阵面,內(nèi)容是待解析的HTML字符串轻局。這樣它會首先讀取本地的文件內(nèi)容,然后用文件內(nèi)容以字符串的形式傳遞給PyQuery來初始化样刷。
以上三種初始化方式均可仑扑,當然最常用的初始化方式還是以字符串形式傳遞。
3.基本CSS選擇器
從這一節(jié)開始置鼻,我們就要對PyQuery對象進行操作镇饮,獲得我們想要的各種數(shù)據(jù)。你會看到解析網(wǎng)頁箕母,不論什么庫储藐,基本原理實際上是沒有區(qū)別的,學會了一種解析庫司蔬。再看其他解析庫文檔,是很容易理解的姨蝴。
在 CSS 中俊啼,選擇器是一種模式,用于選擇需要添加樣式的元素左医。
本文只講clas id 和element最常見的css選擇器授帕。對css不太懂了,也沒關系浮梢,可以去w3c的css選擇器
html = '''
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
在這里我們初始化PyQuery對象之后跛十,傳入了一個CSS選擇器,#container .list li秕硝,意思是選取id為container的節(jié)點內(nèi)部的class為list的節(jié)點內(nèi)部的所有l(wèi)i節(jié)點芥映。然后打印輸出,可以看到成功獲取到了符合條件的節(jié)點远豺。
然后我們將它的類型打印輸出奈偏,可以看到它的類型依然是PyQuery類型。有層級的關系需要用空格隔開.
>>> from pyquery import PyQuery as pq
>>> doc=pq(html)
>>> print(doc("#container .list li"))
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
4.查找元素
下面我們介紹一些常用的查詢函數(shù)躯护,這些函數(shù)和jQuery中的函數(shù)用法也完全相同惊来。
html = '''
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
4.1子元素
查找子節(jié)點需要用到find()方法,傳入的參數(shù)是CSS選擇器棺滞,我們還是以上面的HTML為例裁蚁∈冈ǎ可以使用層層嵌套的方式.
'''
>>> from pyquery import PyQuery as pq
>>> doc=pq(html)
>>> items=doc(".list")
>>> print(type(items))
<class 'pyquery.pyquery.PyQuery'>
>>> print(items)
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
>>> list=items.find("li")
>>> print(type(list))
<class 'pyquery.pyquery.PyQuery'>
>>> print(list)
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
首先我們選取了class為list的節(jié)點,然后我們調(diào)用了find()方法枉证,傳入了CSS選擇器矮男,選取其內(nèi)部的li節(jié)點,最后都打印輸出即可觀察到對應的查詢結果刽严,可以發(fā)現(xiàn)find()方法會將符合條件的所有節(jié)點選擇出來昂灵,結果的類型是PyQuery類型。
其實find()的查找范圍是節(jié)點的所有子孫節(jié)點舞萄,而如果我們只想查找子節(jié)點眨补,那可以用children()方法。
>>> list = items.children()
>>> print(type(list))
<class 'pyquery.pyquery.PyQuery'>
>>> print(list)
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
如果要篩選所有子節(jié)點中符合條件的節(jié)點倒脓,比如我們想篩選出子節(jié)點中class為active的節(jié)點撑螺,可以向children()方法傳入CSS選擇器.active
>>> list = items.children('.active')
>>> print(list)
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
4.2父元素
4.2.1parent()方法
我們可以用parent()方法來獲取某個節(jié)點的父節(jié)點,我們用一個實例來感受一下:
html = '''
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
以下案例分析:
在這里我們首先用.list選取了class為list的節(jié)點崎弃,然后調(diào)用了parent()方法甘晤,得到其父節(jié)點,類型依然是PyQuery類型饲做。
這里的父節(jié)點是該節(jié)點的直接父節(jié)點线婚,也就是說,它不會再去查找父節(jié)點的父節(jié)點盆均,即祖先節(jié)點塞弊。
>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> items = doc('.list')
>>> container = items.parent()
>>> print(type(container))
<class 'pyquery.pyquery.PyQuery'>
>>> print(container)
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
4.2.2parents()方法
以下案例:但是如果我們想獲取某個祖先節(jié)點怎么辦呢?可以用parents()方法泪姨。
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
parents查找所有的父親節(jié)點,返回兩個結果.
>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> items = doc('.list')
>>> parents = items.parents()
>>> print(type(parents))
<class 'pyquery.pyquery.PyQuery'>
>>> print(parents)
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div><div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
parents可進行再次篩選
>>> parent = items.parents('.wrap')
>>> print(parent)
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
>>>
4.3兄弟元素
在上面我們說明了子節(jié)點和父節(jié)點的用法游沿,還有一種節(jié)點那就是兄弟節(jié)點,如果要獲取兄弟節(jié)點可以使用siblings()方法肮砾。我們還是以上面的HTML代碼為例來感受一下:
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
屬性沒有加空格表表示同一個標簽列里面,是并列的意思.在這里我們首先選擇了class為list的節(jié)點內(nèi)部的class為item-0和active的節(jié)點诀黍,也就是第三個li節(jié)點。那么很明顯它的兄弟節(jié)點有四個仗处,那就是第一眯勾、二、四咒精、五個li節(jié)點】醯担可以看到運行結果也正是我們剛才所說的四個兄弟節(jié)點模叙。
>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.list .item-0.active')
>>> print(li.siblings())
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0">first item</li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
果要篩選某個兄弟節(jié)點,我們依然可以向方法傳入CSS選擇器鞋屈,這樣就會從所有兄弟節(jié)點中挑選出符合條件的節(jié)點了范咨。
在這里我們篩選了class為active的節(jié)點故觅,通過剛才的結果我們可以觀察到class為active的兄弟節(jié)點只有第四個li節(jié)點,所以結果應該是一個,如下:
>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.list .item-0.active')
>>> print(li.siblings('.active'))
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
5.遍歷
我們剛才可以觀察到渠啊,PyQuery的選擇結果可能是多個節(jié)點输吏,可能是單個節(jié)點,類型都是PyQuery類型替蛉,并沒有返回像BeautifulSoup一樣的列表贯溅。
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
5.1單個元素
對于單個節(jié)點來說,我們可以直接打印輸出躲查,也可直接轉成字符串它浅。
>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.item-0.active')
>>> print(li)
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
5.2多個元素
如下案例:
- 對于多個節(jié)點的結果,我們就需要遍歷來獲取了镣煮,例如這里我們把每一個li節(jié)點進行遍歷,姐霍,需要調(diào)用items()方法。
- 在這里我們可以發(fā)現(xiàn)調(diào)用items()方法后典唇,會得到一個生成器镊折,遍歷一下,就可以逐個得到li節(jié)點對象了介衔,它的類型也是PyQuery類型恨胚,所以每個li標簽還可以調(diào)用前面所說的方法進行選擇,比如繼續(xù)查詢子節(jié)點炎咖,尋找某個祖先節(jié)點等等赃泡,非常靈活。
>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> lis=doc("li").items()
>>> print(type(list))
<class 'pyquery.pyquery.PyQuery'>
>>> for li in lis:
print(li)
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
6.獲取信息
提取到節(jié)點之后塘装,我們的最終目的當然是提取節(jié)點所包含的信息了急迂,比較重要的信息有兩類影所,一是獲取屬性蹦肴,二是獲取文本,下面我們分別進行說明猴娩。
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
6.1獲取屬性
提取到某個PyQuery類型的節(jié)點之后阴幌,我們可以調(diào)用attr()方法來獲取屬性,有兩種方式可以進行獲取,如下:
>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> a = doc('.item-0.active a')#這里有個空格,則選擇里面的標簽
>>> print(a)
<a href="link3.html"><span class="bold">third item</span></a>
>>> print(a.attr('href'))#方法一
link3.html
>>> print(a.attr.href)#方法二
link3.html
注意:
- 當返回結果包含多個節(jié)點時,調(diào)用attr()方法只會得到第一個節(jié)點的屬性卷中。
- 在進行屬性獲取的時候觀察一下返回節(jié)點是一個還是多個矛双,如果是多個,則需要遍歷才能依次獲取每個節(jié)點的屬性蟆豫。
6.2獲取文本
獲取節(jié)點之后的另一個主要的操作就是獲取其內(nèi)部的文本了议忽,我們可以調(diào)用text()方法來獲取
>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> a = doc('.item-0.active a')
>>> print(a)
<a href="link3.html"><span class="bold">third item</span></a>
>>> print(a.text())
third item
我們首先選中了一個a節(jié)點,然后調(diào)用了text()方法十减,就可以獲取其內(nèi)部的文本信息了栈幸,它會忽略掉標簽內(nèi)部包含的所有HTML愤估,只返回純文字內(nèi)容。
6.3獲取HTML
但如果我們想要獲取這個節(jié)點內(nèi)部的HTML文本速址,就可以用html()方法玩焰。
>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.item-0.active')
>>> print(li)
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
>>> print(li.html())
<a href="link3.html"><span class="bold">third item</span></a>
這里我們選中了第三個li節(jié)點,然后調(diào)用了html()方法芍锚,它返回的結果應該是li標簽內(nèi)的所有HTML文本昔园。
6.4獲取屬性/文本/HTML總結
注意:這里同樣有一個問題,如果我們選中的結果是多個節(jié)點并炮,text()或html()會返回什么內(nèi)容默刚?
- 我們選中的是所有的li節(jié)點,可以發(fā)現(xiàn)html()方法返回的是第一個li節(jié)點的內(nèi)部HTML文本,而text()則返回了所有的li節(jié)點內(nèi)部純文本臣淤,中間用一個空格分割開沉御,實際上是一個字符串。
- 如果我們得到的結果是多個節(jié)點皂冰,如果要獲取每個節(jié)點的內(nèi)部HTML文本,則需要遍歷每個節(jié)點养篓,而text()方法不需要遍歷就可以獲取秃流,它是將所有節(jié)點取文本之后合并成一個字符串。
7.DOM操作
PyQuery提供了一系列方法來對節(jié)點進行動態(tài)修改操作柳弄,比如為某個節(jié)點添加一個class舶胀,移除某個節(jié)點等等,這些操作有時候會為提取信息帶來極大的便利碧注。
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
7.1addClass嚣伐、removeClass
首先我們選中了第三個li節(jié)點,然后調(diào)用了removeClass()方法萍丐,將li的active這個class移除轩端,后來又調(diào)用了addClass()方法,又將class添加回來逝变,每執(zhí)行一次操作基茵,就打印輸出一下當前l(fā)i節(jié)點的內(nèi)容。
>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.item-0.active')
>>> print(li)
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
>>> li.removeClass('active')#[<li.item-0>]
>>> print(li)
<li class="item-0"><a href="link3.html"><span class="bold">third item</span></a></li>
>>> li.addClass('active')#[<li.item-0.active>]
>>> print(li)
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
可以看到一共進行了三次輸出壳影,第二次輸出li標簽的active這個class被移除了拱层,第三次class又添加回來了。
所以說我們addClass()宴咧、removeClass()這些方法可以動態(tài)地改變節(jié)點的class屬性根灯。
7.2attr、css
7.2.1attr
當然除了操作class這個屬性,也有attr()方法來專門針對屬性進行操作
>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.item-0.active')
>>> print(li)
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
>>> li.attr('name', 'link')#[<li.item-0.active>]
>>> print(li)
<li class="item-0 active" name="link"><a href="link3.html"><span class="bold">third item</span></a></li>
在這里我們首先選中了li標簽烙肺,然后調(diào)用attr()方法來修改/增加屬性芥驳,第一個參數(shù)為屬性名,第二個參數(shù)為屬性值.如原來存在,則修改屬性值,如不存在,則增加.
7.2.2css
>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> li = doc('.item-0.active')
>>> print(li)
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
>>> li.css('font-size', '14px')#[<li.item-0.active>]
>>> print(li)
<li class="item-0 active" name="link" style="font-size: 14px"><a href="link3.html"><span class="bold">third item</span></a></li>
7.3remove
remove顧名思義移除茬高,remove()方法有時會為信息的提取帶來非常大的便利兆旬。這個用的比較頻繁下面我們看一個實例:
html = '''
<div class="wrap">
Hello, World
<p>This is a paragraph.</p>
</div>
'''
在這里有一段HTML文本,我們現(xiàn)在想提取Hello, World這個字符串怎栽,而不要p節(jié)點內(nèi)部的字符串丽猬,這個怎樣來提取熏瞄?
>>> from pyquery import PyQuery as pq
>>> doc = pq(html)
>>> wrap = doc('.wrap')
>>> print(wrap.text())
Hello, World
This is a paragraph.
>>> wrap.find('p').remove()#[<p>]
>>> print(wrap.text())
Hello, World
注意:
- 在這里我們直接先嘗試提取class為wrap的節(jié)點的內(nèi)容脚祟,看看是不是我們想要的,運行結果是Hello, World,This is a paragraph.
- 然而這個結果還包含了內(nèi)部的p節(jié)點的內(nèi)容强饮,也就是說text()把所有的純文本全提取出來了由桌。如果我們想去掉p節(jié)點內(nèi)部的文本,可以選擇再把p節(jié)點內(nèi)的文本提取一遍邮丰,然后從整個結果中移除這個子串行您,但這個做法明顯比較繁瑣。
- 那這是remove()方法就可以派上用場了剪廉,我們可以接著這么做,我們首先選中了p節(jié)點娃循,然后調(diào)用了remove()方法將其移除,然后這時wrap內(nèi)部就只剩下Hello, World這句話了斗蒋,然后再利用text()方法提取即可捌斧。
- 所以說,remove()方法可以刪除某些冗余內(nèi)容泉沾,來方便我們的提取捞蚂。在適當?shù)臅r候使用可以極大地提高效率。
其他DOM方法
- 另外其實還有很多節(jié)點操作的方法跷究,比如append()姓迅、empty()、prepend()等方法揭朝,他們和jQuery的用法是完全一致的队贱,詳細的用法可以看到官方文檔色冀。
http://pyquery.readthedocs.io/en/latest/api.html
8.偽類選擇器
CSS選擇器之所以強大潭袱,還有一個很重要的原因就是它支持多種多樣的偽類選擇器。例如選擇第一個節(jié)點锋恬、最后一個節(jié)點屯换、奇偶數(shù)節(jié)點、包含某一文本的節(jié)點等等,我們用一個實例感受一下:
html = '''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
計數(shù)是從0開始的
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('li:first-child')#節(jié)點彤悔、第一個
print(li)
li = doc('li:last-child')#節(jié)點嘉抓、最后一個
print(li)
li = doc('li:nth-child(2)')#節(jié)點、第二個
print(li)
li = doc('li:gt(2)')#獲取序號比2大的標簽
print(li)
li = doc('li:nth-child(2n)')#獲取偶數(shù)的標簽,2n+1則是獲得奇數(shù)
print(li)
li = doc('li:contains(second)')#包含second文本的
print(li)
<li class="item-0">first item</li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
更多CSS選擇器可以查看
http://www.w3school.com.cn/css/index.asp
官方文檔
http://pyquery.readthedocs.io/
作者:durian221783310
鏈接:http://www.reibang.com/p/d223a0181edb
來源:簡書