在上一節咱們介紹了 BeautifulSoup 的使用,它是一個很是強大的網頁解析庫,可有沒有以爲它的一些方法使用有點不適應?有沒有以爲它的 CSS 選擇器功能沒有那麼強大?html
若是你對 Web 有所涉及,若是你比較喜歡用 CSS 選擇器,若是你對 jQuery 有所瞭解,那麼這裏有一個更適合你的解析庫—— PyQuery。segmentfault
接下來咱們就來感覺一下 PyQuery 的強大之處。api
在開始以前請確保已經正確安裝好了 PyQuery,如沒有安裝能夠參考第一章的安裝過程。app
像 BeautifulSoup 同樣,PyQuery 初始化的時候也須要傳入 HTML 數據源來初始化一個操做對象,它的初始化方式有多種,好比直接傳入字符串,傳入 URL,傳文件名。下面咱們來詳細介紹一下。ide
首先咱們用一個實例來感覺一下:函數
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')) Python資源分享qun 784758214 ,內有安裝包,PDF,學習視頻,這裏是Python學習者的彙集地,零基礎,進階,都歡迎
運行結果:學習
<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>
在這裏咱們首先引入了 PyQuery 這個對象,取別名爲 pq,而後聲明瞭一個長 HTML 字符串,看成參數傳遞給 PyQuery,這樣就成功完成了初始化,而後接下來將初始化的對象傳入 CSS 選擇器,在這個實例中咱們傳入 li 節點,這樣就能夠選擇全部的 li 節點,打印輸出能夠看到全部的 li 節點的 HTML 文本。測試
初始化的參數不只能夠以字符串的形式傳遞,還能夠傳入網頁的 URL,在這裏只須要指定參數爲 url 便可:url
from pyquery import PyQuery as pq doc = pq(url='http://www.segmentfault.com') print(doc('title'))
運行結果:spa
<title>SegmentFault 思否</title>
這樣的話 PyQuery 會首先請求這個 URL,而後用獲得的 HTML 內容完成初始化,其實就至關於咱們用網頁的源代碼以字符串的形式傳遞給 PyQuery 來初始化。
它與下面的功能是相同的:
from pyquery import PyQuery as pq import requests doc = pq(requests.get('http://www.segmentfault.com').text) print(doc('title'))
固然除了傳遞一個 URL,還能夠傳遞本地的文件名,參數指定爲 filename 便可:
from pyquery import PyQuery as pq doc = pq(filename='demo.html') print(doc('li'))
固然在這裏須要有一個本地 HTML 文件 demo.html,內容是待解析的 HTML 字符串。這樣它會首先讀取本地的文件內容,而後用文件內容以字符串的形式傳遞給 PyQuery 來初始化。
以上三種初始化方式都可,固然最經常使用的初始化方式仍是以字符串形式傳遞。
咱們首先用一個實例來感覺一下 PyQuery 的 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> ''' from pyquery import PyQuery as pq doc = pq(html) print(doc('#container .list li')) print(type(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> <class 'pyquery.pyquery.PyQuery'>
在這裏咱們初始化 PyQuery 對象以後,傳入了一個 CSS 選擇器,#container .list li,意思是選取 id 爲 container 的節點內部的 class 爲 list 的節點內部的全部 li 節點。而後打印輸出,能夠看到成功獲取到了符合條件的節點。
而後咱們將它的類型打印輸出,能夠看到它的類型依然是 PyQuery類型。
下面咱們介紹一些經常使用的查詢函數,這些函數和 jQuery 中的函數用法也徹底相同。
查找子節點須要用到 find() 方法,傳入的參數是 CSS 選擇器,咱們仍是以上面的 HTML 爲例:
from pyquery import PyQuery as pq doc = pq(html) items = doc('.list') print(type(items)) print(items) lis = items.find('li') print(type(lis)) print(lis)
運行結果:
<class 'pyquery.pyquery.PyQuery'> <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> <class 'pyquery.pyquery.PyQuery'> <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 的節點,而後咱們調用了 find() 方法,傳入了 CSS 選擇器,選取其內部的 li 節點,最後都打印輸出便可觀察到對應的查詢結果,能夠發現 find() 方法會將符合條件的全部節點選擇出來,結果的類型是 PyQuery 類型。
其實 find() 的查找範圍是節點的全部子孫節點,而若是咱們只想查找子節點,那能夠用 children() 方法:
lis = items.children() print(type(lis)) print(lis)
運行結果:
<class 'pyquery.pyquery.PyQuery'> <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 爲 active 的節點,能夠向 children() 方法傳入 CSS 選擇器 .active:
lis = items.children('.active') print(lis)
運行結果:
<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>
能夠看到輸出的結果已經作了篩選,留下了 class 爲 active 的節點。
咱們能夠用 parent() 方法來獲取某個節點的父節點,咱們用一個實例來感覺一下:
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> ''' from pyquery import PyQuery as pq doc = pq(html) items = doc('.list') container = items.parent() print(type(container)) print(container)
運行結果:
<class 'pyquery.pyquery.PyQuery'> <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 的節點,而後調用了 parent() 方法,獲得其父節點,類型依然是 PyQuery 類型。
這裏的父節點是該節點的直接父節點,也就是說,它不會再去查找父節點的父節點,即祖先節點。
可是若是咱們想獲取某個祖先節點怎麼辦呢?能夠用 parents() 方法:
from pyquery import PyQuery as pq doc = pq(html) items = doc('.list') parents = items.parents() print(type(parents)) print(parents)
運行結果:
<class 'pyquery.pyquery.PyQuery'> <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() 方法,能夠看到輸出結果有兩個,一個是 class 爲 wrap 的節點,一個是 id 爲 container 的節點,也就是說,parents() 方法會返回全部的祖先節點。
若是咱們想要篩選某個祖先節點的話能夠向 parents() 方法傳入 CSS 選擇器,這樣就會返回祖先節點中符合 CSS 選擇器的節點:
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> Python資源分享qun 784758214 ,內有安裝包,PDF,學習視頻,這裏是Python學習者的彙集地,零基礎,進階,都歡迎
能夠看到輸出結果就少了一個節點,只保留了 class 爲 wrap 的節點。
在上面咱們說明了子節點和父節點的用法,還有一種節點那就是兄弟節點,若是要獲取兄弟節點可使用 siblings() 方法。咱們仍是以上面的 HTML 代碼爲例來感覺一下:
from pyquery import PyQuery as pq doc = pq(html) li = doc('.list .item-0.active') print(li.siblings())
在這裏咱們首先選擇了 class 爲 list 的節點內部的 class 爲 item-0 和 active 的節點,也就是第三個 li 節點。那麼很明顯它的兄弟節點有四個,那就是第1、2、4、五個 li 節點。
運行結果:
<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>
能夠看到運行結果也正是咱們剛纔所說的四個兄弟節點。
若是要篩選某個兄弟節點,咱們依然能夠向方法傳入 CSS 選擇器,這樣就會從全部兄弟節點中挑選出符合條件的節點了:
from pyquery import PyQuery as pq doc = pq(html) li = doc('.list .item-0.active') print(li.siblings('.active'))
在這裏咱們篩選了 class 爲 active 的節點,經過剛纔的結果咱們能夠觀察到 class 爲 active 的兄弟節點只有第四個 li 節點,因此結果應該是一個。
運行結果:
<li class="item-1 active"><a href="link4.html">fourth item</a></li>
咱們剛纔能夠觀察到,PyQuery 的選擇結果多是多個節點,多是單個節點,類型都是 PyQuery 類型,並無返回像 BeautifulSoup 同樣的列表。
對於單個節點來講,咱們能夠直接打印輸出,也可直接轉成字符串:
from pyquery import PyQuery as pq doc = pq(html) li = doc('.item-0.active') print(li) print(str(li))
運行結果:
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li> <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
對於多個節點的結果,咱們就須要遍從來獲取了,例如這裏咱們把每個 li 節點進行遍歷,,須要調用 items() 方法:
from pyquery import PyQuery as pq doc = pq(html) lis = doc('li').items() print(type(lis)) for li in lis: print(li, type(li))
運行結果:
<class 'generator'> <li class="item-0">first item</li> <class 'pyquery.pyquery.PyQuery'> <li class="item-1"><a href="link2.html">second item</a></li> <class 'pyquery.pyquery.PyQuery'> <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li> <class 'pyquery.pyquery.PyQuery'> <li class="item-1 active"><a href="link4.html">fourth item</a></li> <class 'pyquery.pyquery.PyQuery'> <li class="item-0"><a href="link5.html">fifth item</a></li> <class 'pyquery.pyquery.PyQuery'>
在這裏咱們能夠發現調用 items() 方法後,會獲得一個生成器,遍歷一下,就能夠逐個獲得 li 節點對象了,它的類型也是 PyQuery 類型,因此每一個 li 節點還能夠調用前面所說的方法進行選擇,好比繼續查詢子節點,尋找某個祖先節點等等,很是靈活。
提取到節點以後,咱們的最終目的固然是提取節點所包含的信息了,比較重要的信息有兩類,一是獲取屬性,二是獲取文本,下面咱們分別進行說明。
提取到某個 PyQuery 類型的節點以後,咱們能夠調用 attr() 方法來獲取屬性:
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> ''' from pyquery import PyQuery as pq doc = pq(html) a = doc('.item-0.active a') print(a, type(a)) print(a.attr('href'))
運行結果:
<a href="link3.html"><span class="bold">third item</span></a> <class 'pyquery.pyquery.PyQuery'> link3.html
在這裏咱們首先選中了 class 爲 item-0 和 active 的 li 節點內的 a 節點,它的類型能夠看到是 PyQuery 類型。
而後咱們調用了 attr() 方法,而後傳入屬性的名稱,就能夠獲得這個屬性值了。
也能夠經過調用 attr 屬性來獲取屬性,用法以下:
print(a.attr.href)
結果:
link3.html
結果是徹底同樣的,在這裏咱們沒有調用方法,而是調用了 attr 屬性,而後再調用屬性名,一樣能夠獲得屬性值。
若是咱們選中的是多個元素,而後調用 attr() 方法會出現怎樣的結果?咱們用一個實例來測試一下:
a = doc('a') print(a, type(a)) print(a.attr('href')) print(a.attr.href)
運行結果:
<a href="link2.html">second item</a><a href="link3.html"><span class="bold">third item</span></a><a href="link4.html">fourth item</a><a href="link5.html">fifth item</a> <class 'pyquery.pyquery.PyQuery'> link2.html link2.html
照理來講咱們選中的 a 節點應該有四個,並且打印結果也是四個,可是當咱們調用 attr() 方法時,返回的結果卻只是第一個。
因此當返回結果包含多個節點時,調用 attr() 方法只會獲得第一個節點的屬性。
那麼遇到這種狀況若是咱們想獲取全部的 a 節點的屬性,就須要用到上文所說的遍歷了:
from pyquery import PyQuery as pq doc = pq(html) a = doc('a') for item in a.items(): print(item.attr('href'))
運行結果:
link2.html link3.html link4.html link5.html
因此,在進行屬性獲取的時候觀察一下返回節點是一個仍是多個,若是是多個,則須要遍歷才能依次獲取每一個節點的屬性。
獲取節點以後的另外一個主要的操做就是獲取其內部的文本了,咱們能夠調用 text() 方法來獲取:
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> ''' from pyquery import PyQuery as pq doc = pq(html) a = doc('.item-0.active a') print(a) print(a.text())
運行結果:
<a href="link3.html"><span class="bold">third item</span></a> third item
咱們首先選中了一個 a 節點,而後調用了 text() 方法,就能夠獲取其內部的文本信息了,它會忽略掉節點內部包含的全部 HTML,只返回純文字內容。
但若是咱們想要獲取這個節點內部的 HTML 文本,就能夠用 html() 方法:
from pyquery import PyQuery as pq doc = pq(html) li = doc('.item-0.active') print(li) print(li.html())
這裏咱們選中了第三個 li 節點,而後調用了 html() 方法,它返回的結果應該是li節點內的全部 HTML 文本。
運行結果:
<a href="link3.html"><span class="bold">third item</span></a>
這裏一樣有一個問題,若是咱們選中的結果是多個節點,text() 或 html() 會返回什麼內容?
咱們用一個實例來看一下:
html = ''' <div class="wrap"> <div id="container"> <ul class="list"> <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> ''' from pyquery import PyQuery as pq doc = pq(html) li = doc('li') print(li.html()) print(li.text()) print(type(li.text())
運行結果:
<a href="link2.html">second item</a> second item third item fourth item fifth item <class 'str'>
結果可能比較出乎意料,咱們選中的是全部的 li 節點,能夠發現 html() 方法返回的是第一個 li 節點的內部 HTML 文本,而 text() 則返回了全部的 li 節點內部純文本,中間用一個空格分割開,其實是一個字符串。
因此這個地方值得注意,若是咱們獲得的結果是多個節點,若是要獲取每一個節點的內部 HTML 文本,則須要遍歷每一個節點,而 text() 方法不須要遍歷就能夠獲取,它是將全部節點取文本以後合併成一個字符串。
PyQuery 提供了一系列方法來對節點進行動態修改操做,好比爲某個節點添加一個 class,移除某個節點等等,這些操做有時候會爲提取信息帶來極大的便利。
因爲節點操做的方法太多,下面舉幾個典型的例子來講明它的用法。
咱們先用一個實例來感覺一下:
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> ''' from pyquery import PyQuery as pq doc = pq(html) li = doc('.item-0.active') print(li) li.removeClass('active') print(li) li.addClass('active') print(li)
首先咱們選中了第三個 li 節點,而後調用了 removeClass() 方法,將 li 節點的 active 這個 class 移除,後來又調用了 addClass() 方法,又將 class 添加回來,每執行一次操做,就打印輸出一下當前 li 節點的內容。
運行結果:
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li> <li class="item-0"><a href="link3.html"><span class="bold">third item</span></a></li> <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
能夠看到一共進行了三次輸出,第二次輸出 li 節點的 active 這個 class 被移除了,第三次 class 又添加回來了。
因此說咱們 addClass()、removeClass() 這些方法能夠動態地改變節點的 class 屬性。
固然除了操做 class 這個屬性,也有 attr() 方法來專門針對屬性進行操做,也能夠用 text()、html() 方法來改變節點內部的內容。
咱們用實例感覺一下:
html = ''' <ul class="list"> <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li> </ul> ''' from pyquery import PyQuery as pq doc = pq(html) li = doc('.item-0.active') print(li) li.attr('name', 'link') print(li) li.text('changed item') print(li) li.html('<span>changed item</span>') print(li)
在這裏咱們首先選中了 li 節點,而後調用 attr() 方法來修改屬性,第一個參數爲屬性名,第二個參數爲屬性值,而後咱們調用了 text() 和 html() 方法來改變節點內部的內容。三次操做後分別又打印輸出當前 li 節點。
運行結果:
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li> <li class="item-0 active" name="link"><a href="link3.html"><span class="bold">third item</span></a></li> <li class="item-0 active" name="link">changed item</li> <li class="item-0 active" name="link"><span>changed item</span></li>
能夠發現,調用 attr() 方法後,li 節點多了一個本來不存在的屬性 name,其值爲 link,調用 text() 方法,傳入文本以後,發現 li 節點內部的文本就全被改變爲傳入的字符串文本了。調用 html() 方法傳入 HTML 文本以後,li 節點內部又改變爲傳入的 HTML 文本。
因此說,attr() 方法若是隻傳入第一個參數屬性名,則是獲取這個屬性值,若是傳入第二個參數,能夠用來修改屬性值,text() 和 html() 方法若是不傳參數是獲取節點內純文本和 HTML 文本,若是傳入參數則是進行賦值。
remove 顧名思義移除,remove() 方法有時會爲信息的提取帶來很是大的便利。下面咱們看一個實例:
html = ''' <div class="wrap"> Hello, World <p>This is a paragraph.</p> </div> ''' from pyquery import PyQuery as pq doc = pq(html) wrap = doc('.wrap') print(wrap.text())
在這裏有一段 HTML 文本,咱們如今想提取 Hello, World 這個字符串,而不要 p 節點內部的字符串,這個怎樣來提取?
在這裏咱們直接先嚐試提取 class 爲 wrap 的節點的內容,看看是否是咱們想要的,運行結果以下:
Hello, World This is a paragraph.
然而這個結果還包含了內部的 p 節點的內容,也就是說 text() 把全部的純文本全提取出來了。若是咱們想去掉 p 節點內部的文本,能夠選擇再把 p 節點內的文本提取一遍,而後從整個結果中移除這個子串,但這個作法明顯比較繁瑣。
那這是 remove() 方法就能夠派上用場了,咱們能夠接着這麼作:
wrap.find('p').remove() print(wrap.text())
咱們首先選中了 p 節點,而後調用了 remove() 方法將其移除,而後這時 wrap 內部就只剩下 Hello, World 這句話了,而後再利用 text()方 法提取便可。
因此說,remove() 方法能夠刪除某些冗餘內容,來方便咱們的提取。在適當的時候使用能夠極大地提升效率。
另外其實還有不少節點操做的方法,好比 append()、empty()、prepend() 等方法,他們和 jQuery 的用法是徹底一致的,詳細的用法能夠參考官方文檔:http://pyquery.readthedocs.io...
CSS 選擇器之因此強大,還有一個很重要的緣由就是它支持多種多樣的僞類選擇器。例如選擇第一個節點、最後一個節點、奇偶數節點、包含某一文本的節點等等,咱們用一個實例感覺一下:
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> ''' from pyquery import PyQuery as pq doc = pq(html) li = doc('li:first-child') print(li) li = doc('li:last-child') print(li) li = doc('li:nth-child(2)') print(li) li = doc('li:gt(2)') print(li) li = doc('li:nth-child(2n)') print(li) li = doc('li:contains(second)') print(li) Python資源分享qun 784758214 ,內有安裝包,PDF,學習視頻,這裏是Python學習者的彙集地,零基礎,進階,都歡迎
在這裏咱們使用了 CSS3 的僞類選擇器,依次選擇了第一個 li 節點、最後一個 li 節點、第二個 li 節點、第三個 li 以後的 li 節點、偶數位置的 li 節點、包含 second 文本的 li 節點,功能十分強大。
到此爲止 PyQuery 的經常使用用法就介紹完了