如果你對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)