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 = 『『『首先選中了第三個li節點,然後呼叫removeclass()方法,將li節點的active這個class移除,後來又呼叫addclass()方法,將class新增回來。每執行一次操作,就列印輸出當前li節點的內容。『『『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)
可以看到,一共輸出了3次。第二次輸出時,li節點的active這個class被移除了,第三次class又新增回來了。
所以說,addclass()和removeclass()這些方法可以動態改變節點的class屬性。
當然,除了操作class這個屬性外,也可以用attr()方法對屬性進行操作。此外,還可以用text()和html()方法來改變節點內部的內容。示例如下:
html = 『『『這裡我們首先選中li節點,然後呼叫attr()方法來修改屬性,其中該方法的第乙個引數為屬性名,第二個引數為屬性值。接著,呼叫text()和html()方法來改變節點內部的內容。三次操作後,分別列印輸出當前的li節點。『『『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)
可以發現,呼叫attr()方法後,li節點多了乙個原本不存在的屬性name,其值為link。接著呼叫text()方法,傳入文字之後,li節點內部的文字全被改為傳入的字串文字了。最後,呼叫html()方法傳入html文字後,li節點內部又變為傳入的html文字了。
所以說,如果attr()方法只傳入第乙個引數的屬性名,則是獲取這個屬性值;如果傳入第二個引數,可以用來修改屬性值。text()和html()方法如果不傳引數,則是獲取節點內純文字和html文字;如果傳入引數,則進行賦值。
顧名思義,remove()方法就是移除,它有時會為資訊的提取帶來非常大的便利。下面有一段html文字:
html = 『『『現在想提取hello, world這個字串,而不要p節點內部的字串,需要怎樣操作呢?hello, world
this is a paragraph.
『『『from pyquery import pyquery as pq
doc = pq(html)
wrap = doc(『.wrap『)
print(wrap.text())
這裡直接先嘗試提取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...