pyquery

xiaoxiao2025-11-20  8

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

 

转载请注明原文地址: https://www.6miu.com/read-5039967.html

最新回复(0)