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)

 

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