pyquery
Posted sunlizhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)