Pyquery物件中CSS用法

2021-08-29 23:47:45 字數 3294 閱讀 3539

pyquery物件中css選擇器的用法

首先將html轉為pyquery物件在用css選擇器

doc = pq(html)

print(doc('#con .list li'))選id是con 然後在選內部 class為list 節點內部所有li節點

item = doc('.list') 

子節點

find()方法  item.find(『li』)符合條件的所有子孫節點  

children()方法  item.children(『.active』)進一步篩選     如果只差子節點 用此方法  

父節點

parent()返回直接的父節點

parents()返回所有的祖先節點

如果找某個特定的祖先節點 向parents()傳入css選擇器 item.parents('.wap')

兄弟節點

li = doc('.list .item-0.active')

li.siblings()會選出所有的兄弟節點 包括上兄弟和下兄弟 需要選特定某個兄弟 需要傳入css選擇器 li.siblings('.active')

遍歷

多個節點需要遍歷出來

li = doc('li') 選到所有的li標籤 需要調items()方法返回的是generator型別

generator(生成器)是es6標準引入的新的資料型別。乙個generator看上去像乙個函式,但可以返回多次

獲取資訊

獲取屬性

a = doc('a')

一、attr()方法獲取屬性 a.attr('href')   如果選的多個  attr()只返回第乙個 也就是只有第乙個能被呼叫 要獲取全部需要遍歷

二、a.attr.href 返回全部

獲取文字

獲取a節點文字 a.text() 返回的是字串

若要獲取整個html文字 用html()方法

如果匹配到的是多個節點 text()獲取全部  html()只能獲取第乙個 除非遍歷

偽類選擇器

li = doc('li:first-child') 第乙個li節點

li = doc('li:last-child')  最後乙個li節點

li = doc('li:nth-child(2)')第二個li節點

li = doc('li:gt(2)')  第三個li節點之後的li節點

li = doc('li:nth-child(2n)') 偶數字置的li節點

li = doc('li:cobtains(content)') 包含content文字的節點

li 

=doc

(『li:contains(second)『

)

節點操作

我們先用例項來感受一下:

html = 『『『

『『『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節點的內容。

可以看到,一共輸出了3次。第二次輸出時,li節點的active這個class被移除了,第三次class又新增回來了。

所以說,addclass()和removeclass()這些方法可以動態改變節點的class屬性。

當然,除了操作class這個屬性外,也可以用attr()方法對屬性進行操作。此外,還可以用text()和html()方法來改變節點內部的內容。示例如下:

html = 『『『

『『『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(『changed item『)

print(li)

這裡我們首先選中li節點,然後呼叫attr()方法來修改屬性,其中該方法的第乙個引數為屬性名,第二個引數為屬性值。接著,呼叫text()和html()方法來改變節點內部的內容。三次操作後,分別列印輸出當前的li節點。

可以發現,呼叫attr()方法後,li節點多了乙個原本不存在的屬性name,其值為link。接著呼叫text()方法,傳入文字之後,li節點內部的文字全被改為傳入的字串文字了。最後,呼叫html()方法傳入html文字後,li節點內部又變為傳入的html文字了。

所以說,如果attr()方法只傳入第乙個引數的屬性名,則是獲取這個屬性值;如果傳入第二個引數,可以用來修改屬性值。text()和html()方法如果不傳引數,則是獲取節點內純文字和html文字;如果傳入引數,則進行賦值。

顧名思義,remove()方法就是移除,它有時會為資訊的提取帶來非常大的便利。下面有一段html文字:

html = 『『『

hello, world

this is a paragraph.

『『『from pyquery import pyquery as pq

doc = pq(html)

wrap = doc(『.wrap『)

print(wrap.text())

現在想提取hello, world這個字串,而不要p節點內部的字串,需要怎樣操作呢?

這裡直接先嘗試提取class為wrap的節點的內容,看看是不是我們想要的。執行結果如下:

這個結果還包含了內部的p節點的內容,也就是說text()把所有的純文字全提取出來了。如果我們想去掉p節點內部的文字,可以選擇再把p節點內的文字提取一遍,然後從整個結果中移除這個子串,但這個做法明顯比較煩瑣。

這時remove()方法就可以派上用場了,我們可以接著這麼做:

wrap.find(『p『).remove()

print(wrap.text())

python中PyQuery庫用法分享

pyquery庫就是python中的乙個解析庫。作用十分強大,使用上也是相當的靈活,能夠實現初始化字串 初始化 html 檔案 初始化請求響應等多種場景,另外,本身中的css選擇器,也是經常被大家使用的物件,結合以上的大致內容總結,接下來,我們一起詳細的了解使用內容。安裝 pip3 install ...

Python爬蟲之PyQuery的用法

python教程全解 1 安裝 pip install pyquery 2 官方文件 3 初始化 1 直接字串 pq 引數可以直接傳入 html doc 現在就相當於 jquery 裡面的 符號了 from pyquery import pyquery as pq doc pq 2 lxml.etr...

Python爬蟲PyQuery庫基本用法入門教程

pyquery庫也是乙個非常強大又靈活的網頁解析庫,如果你有前端開發經驗的,都應該接觸過jquery,那麼pyquery就是你非常絕佳的選擇,pyquery 是 python 仿照 jquery 的嚴格實現。語法與 jquery 幾乎完全相同,所以不用再去費心去記一些奇怪的方法了。官網位址 jque...