Post

0303pyquery

pyquery(p113)提供了和 jQuery 类似的语法来解析 HTML 文档,支持 CSS 选择器

使用

简单的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
html = """<div id="container">
  <ul class="list">
        <li class="item-0">first item</li>
        <li class="item-1"><a href="link2.html">second item</a></li>
        <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
        <li class="item-1 active"><a href="link4.html">fourth item</a></li>
        <li class="item-0"><a href="link5.html">fifth item</a></li>
        <li name="empty li"/>
    </ul>
</div>"""
from pyquery import PyQuery as pq
doc=pq(html) #字符串初始化。
#url初始化:pq(url="http://xxxx")
#filename初始化:pq(filename="xx.html")

函数表

操作描述实例
css选择器 doc(‘#container .list li’),返回所有 li 节点
doc(“.item-0.active”),返回<li class="item-0 active"/>节点
items()将返回的pyquery.pyquery.PyQuery转换成generatordoc(‘#container .list li’).items()
text()返回节点文本内容doc(“.item-0.active”).text(),返回third item
text(new_value)修改节点文本内容a=doc(‘.item-1.active a’)
a.text(“new text”),将节点fourth item替换成new text
find从当前节点查找子节点(查找范围是所有子孙节点)doc(‘ul’).find(“.item-0.active”),返回<li class="item-0 active"/>节点
children()返回直接子节点doc(‘ul’).find(“li”).children(),返回4个li节点里的 a节点
parent()返回父节点doc(‘.item-1.active’).parent(),返回ul节点
parents([css_selector])返回所有祖先节点doc(‘.item-1.active’).parents(),返回div、ul(顺序返回,beautiful是递归向上返回)

parents还支持css选择器查找符合条件的祖先节点(但是不会匹配祖先节点里的子节点)
doc(‘.item-1.active’).parents(‘.list’),返回ul
siblings()返回所有兄弟节点(前面后面都包括,且不一定是按节点顺序排列)doc(‘.item-1.active’).siblings(),返回出 <li class="item-0 active"/> 外的其他4个节点
prev()/next()当前节点的前一个/后一个节点 
attr(“x”)
attr.x
获取属性doc(‘.item-1.active a’).attr(“href”)
doc(‘.item-1.active a’).attr.href,返回link4.html
attr(“x”,new_value)修改(添加)属性li.attr(“name”,”newName”)
li.attr(“name”,None),None移除属性
addClass(“class_name”)
removeClass(“class_name”)
添加class到节点
删除节点的class
li=doc(‘.item-1.active’)
li.addClass(“myClass”)
li.removeClass(“myClass”)
html(new_value)改变节点内容a=doc(‘.item-1.active a’)
a.html(“<b>new text<\/b>”)
remove()移除节点a=doc(‘.item-1.active a’)
a.html(“<b>new text<\/b>”)
a.remove(“b”)
append
empty
prepend
  
伪类选择器first-child
last-child
nth-child(n):第n个节点
gt/lt(n):大/小于n的节点(索引从0开始)
empty:无子元素的节点
odd、even:奇偶节点(索引从0开始)
contains
doc(“li:empty”),返回<li name="empty li"/>
doc(“li:contains(second)”)
This post is licensed under CC BY 4.0 by the author.