Python3網絡爬蟲實戰-30、PyQuery

在上一節咱們介紹了 BeautifulSoup 的使用,它是一個很是強大的網頁解析庫,可有沒有以爲它的一些方法使用有點不適應?有沒有以爲它的 CSS 選擇器功能沒有那麼強大?html

若是你對 Web 有所涉及,若是你比較喜歡用 CSS 選擇器,若是你對 jQuery 有所瞭解,那麼這裏有一個更適合你的解析庫—— PyQuery。segmentfault

接下來咱們就來感覺一下 PyQuery 的強大之處。api

1. 準備工做

在開始以前請確保已經正確安裝好了 PyQuery,如沒有安裝能夠參考第一章的安裝過程。app

2. 初始化

像 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 便可: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 來初始化。

以上三種初始化方式都可,固然最經常使用的初始化方式仍是以字符串形式傳遞。

3. 基本CSS選擇器

咱們首先用一個實例來感覺一下 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類型。

4. 查找節點

下面咱們介紹一些經常使用的查詢函數,這些函數和 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>

5. 遍歷

咱們剛纔能夠觀察到,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 節點還能夠調用前面所說的方法進行選擇,好比繼續查詢子節點,尋找某個祖先節點等等,很是靈活。

6. 獲取信息

提取到節點以後,咱們的最終目的固然是提取節點所包含的信息了,比較重要的信息有兩類,一是獲取屬性,二是獲取文本,下面咱們分別進行說明。

獲取屬性

提取到某個 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() 方法不須要遍歷就能夠獲取,它是將全部節點取文本以後合併成一個字符串。

7. 節點操做

PyQuery 提供了一系列方法來對節點進行動態修改操做,好比爲某個節點添加一個 class,移除某個節點等等,這些操做有時候會爲提取信息帶來極大的便利。

因爲節點操做的方法太多,下面舉幾個典型的例子來講明它的用法。

addClass、removeClass

咱們先用一個實例來感覺一下:

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 屬性。

attr、text、html

固然除了操做 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 顧名思義移除,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...

8. 僞類選擇器

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 節點,功能十分強大。

9. 結語

到此爲止 PyQuery 的經常使用用法就介紹完了

相關文章
相關標籤/搜索