91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python3網絡爬蟲實戰-30、PyQuery

發布時間:2020-07-08 21:35:51 來源:網絡 閱讀:206 作者:學Python派森 欄目:編程語言

在上一節我們介紹了 BeautifulSoup 的使用,它是一個非常強大的網頁解析庫,可有沒有覺得它的一些方法使用有點不適應?有沒有覺得它的 CSS 選擇器功能沒有那么強大?

如果你對 Web 有所涉及,如果你比較喜歡用 CSS 選擇器,如果你對 jQuery 有所了解,那么這里有一個更適合你的解析庫—— PyQuery。

接下來我們就來感受一下 PyQuery 的強大之處。

1. 準備工作

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

2. 初始化

像 BeautifulSoup 一樣,PyQuery 初始化的時候也需要傳入 HTML 數據源來初始化一個操作對象,它的初始化方式有多種,比如直接傳入字符串,傳入 URL,傳文件名。下面我們來詳細介紹一下。

字符串初始化

首先我們用一個實例來感受一下:

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'))

運行結果:

<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 節點。那么很明顯它的兄弟節點有四個,那就是第一、二、四、五個 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 的常用用法就介紹完了

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

富平县| 瑞丽市| 安阳县| 伊吾县| 延安市| 西充县| 庐江县| 潜山县| 嘉峪关市| 凌云县| 台安县| 报价| 郧西县| 克什克腾旗| 南召县| 加查县| 尚义县| 滕州市| 永兴县| 库车县| 裕民县| 集贤县| 灌云县| 长寿区| 彭山县| 宣威市| 那坡县| 遵义县| 易门县| 宁乡县| 万年县| 太仆寺旗| 东台市| 霍州市| 札达县| 贡嘎县| 桐柏县| 科技| 喀什市| 怀远县| 崇信县|