pyquery

如果你對web有所涉及,比較喜歡css選擇器,對jquery有所瞭解,那麼有一個更加適合你的解析庫--pyquery

初始化有多種方法比如傳入字符串,傳入url,傳入文件名

字符串初始化

from pyquery import PyQuery as pq
doc = pq(html)
print(doc("li"))

url初始化

from pyquery import PyQuery as pq
doc = pq(url="https://www.baidu.com)
print(doc("title"))

文件初始化

from pyquery import PyQuery as pq
doc = pq(filename = "demo.html")
print(doc("head"))

 

查找節點

直接子節點 children()
子孫節點 find()
父節點 parent()
祖先節點 parents()
兄弟節點 siblings

如果想要篩選某個祖先節點的話,可以像parents()方法傳入css選擇器,這樣就會返回祖先節點中符合css選擇器的節點

items = doc(".list")
print(items.parents(.warp))

 

遍歷

pyquery的選擇結果可能是多個節點,也可能是單個節點,類型都是PyQuery類型的

對於單個節點,可以直接打印輸出,也可以直接轉爲字符串

print(doc("li"))
print(str(doc("li")))

對於多個節點就需要遍歷了

調用items()方法後,會得到一個生成器,就可以逐個得到節點對象,也是PyQuery類型的,每個節點對象還可以進行選擇,非常靈活

from pyquery import PyQuery as pq
doc = pq(filename = "demo.html")
lis = doc("li").items()
for li in lis:
    print(li,type(li))

 

獲取信息

.text()方法,獲取內部的文本信息,會忽略節點內部包含的所有html,只返回純文本內容

如果想要獲取節點內部所有的html文本,就要使用.html()方法

如果選中的結果有多個a節點

a.html()方法返回第一個a節點內部html文本,如果想要獲取全部的就需要遍歷

a.text()返回了所有的a節點內部的純文本,中間用空格分割,返回結果是字符串

 

節點操作

提供了一系列方法對節點進行動態修改,比如爲某一節點添加class,移除某個節點等

addClass()和removeClass()動態改變節點的class屬性

a.addClass("active")    #添加class元素active
a.removeClass("active")    #刪除class元素active

attr()方法對屬性進行操作

a.attr("name","link")

text()和html()方法改變節點內部的內容

a.text("hello world")
a.html("<h1>hello world</h1>")

remove()方法,顧名思義,就是移除

a.children.remove()

 

 

僞類選擇器

from pyquery import PyQuery as pq
html = '''
<li>1a</li>
<li>2b</li>
<li>3c</li>
<li>4d</li>
<li>5e</li>
<li>6f</li>
'''
doc = pq(html)
li = doc("li:first_child") #第一個li節點
print(li)
li = doc("li:last_child") #倒數第一個li節點
print(li)
li = doc("li:nth_child(4)") #指定li節點,從一開始
print(li)
li = doc("li:gt(1)") #第二個li之後的所有li節點
print(li)
li = doc("li:nth_child(2n)") #偶數位置的li節點,或者(even) 
print(li)
li = doc("li:nth_child(2n+1)")#奇數位置的li節點,或者(odd)
print(li)
li = doc("li:contains(a)") #包含內容a的節點,放數字會報錯
print(li)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章