Pyquery对象中CSS用法

xiaoxiao2025-11-16  5

Pyquery对象中CSS选择器的用法

首先将HTML转为Pyquery对象在用css选择器

doc = pq(html) print(doc('#con .list li'))选id是con 然后在选内部 class为list 节点内部所有li节点 item = doc('.list') 

子节点 find()方法  item.find(‘li’)符合条件的所有子孙节点   children()方法  item.children(‘.active’)进一步筛选     如果只差子节点 用此方法  

父节点 parent()返回直接的父节点 parents()返回所有的祖先节点

如果找某个特定的祖先节点 向parents()传入CSS选择器 item.parents('.wap')

兄弟节点 li = doc('.list .item-0.active') li.siblings()会选出所有的兄弟节点 包括上兄弟和下兄弟 需要选特定某个兄弟 需要传入CSS选择器 li.siblings('.active')

遍历   多个节点需要遍历出来 li = doc('li') 选到所有的li标签 需要调items()方法返回的是generator类型 generator(生成器)是ES6标准引入的新的数据类型。一个generator看上去像一个函数,但可以返回多次

获取信息 获取属性 a = doc('a') 一、attr()方法获取属性 a.attr('href')   如果选的多个  attr()只返回第一个 也就是只有第一个能被调用 要获取全部需要遍历 二、a.attr.href 返回全部

获取文本 获取a节点文本 a.text() 返回的是字符串 若要获取整个HTML文本 用html()方法 如果匹配到的是多个节点 text()获取全部  html()只能获取第一个 除非遍历

伪类选择器 li = doc('li:first-child') 第一个li节点 li = doc('li:last-child')  最后一个li节点 li = doc('li:nth-child(2)')第二个li节点 li = doc('li:gt(2)')  第三个li节点之后的li节点 li = doc('li:nth-child(2n)') 偶数位置的li节点 li = doc('li:cobtains(content)') 包含content文本的节点

li </span><span class="pun">=</span><span class="pln"> doc</span><span class="pun">(</span><span class="str">‘li:contains(second)‘</span><span class="pun">)</span>

节点操作

addClass和removeClass

我们先用实例来感受一下:

html = ‘‘‘ <div class="wrap"> <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> </ul> </div> </div> ‘‘‘ from pyquery import PyQuery as pq doc = pq(html) li = doc(‘.item-0.active‘) print(li) li.removeClass(‘active‘) print(li) li.addClass(‘active‘) print(li)

 

 

首先选中了第三个li节点,然后调用removeClass()方法,将li节点的active这个class移除,后来又调用addClass()方法,将class添加回来。每执行一次操作,就打印输出当前li节点的内容。

可以看到,一共输出了3次。第二次输出时,li节点的active这个class被移除了,第三次class又添加回来了。

所以说,addClass()和removeClass()这些方法可以动态改变节点的class属性。

attr、text和html

当然,除了操作class这个属性外,也可以用attr()方法对属性进行操作。此外,还可以用text()和html()方法来改变节点内部的内容。示例如下:

html = ‘‘‘ <ul class="list"> <li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li> </ul> ‘‘‘ from pyquery import PyQuery as pq doc = pq(html) li = doc(‘.item-0.active‘) print(li) li.attr(‘name‘, ‘link‘) print(li) li.text(‘changed item‘) print(li) li.html(‘<span>changed item</span>‘) print(li)

 

 

这里我们首先选中li节点,然后调用attr()方法来修改属性,其中该方法的第一个参数为属性名,第二个参数为属性值。接着,调用text()和html()方法来改变节点内部的内容。三次操作后,分别打印输出当前的li节点。

可以发现,调用attr()方法后,li节点多了一个原本不存在的属性name,其值为link。接着调用text()方法,传入文本之后,li节点内部的文本全被改为传入的字符串文本了。最后,调用html()方法传入HTML文本后,li节点内部又变为传入的HTML文本了。

所以说,如果attr()方法只传入第一个参数的属性名,则是获取这个属性值;如果传入第二个参数,可以用来修改属性值。text()和html()方法如果不传参数,则是获取节点内纯文本和HTML文本;如果传入参数,则进行赋值。

 

 

remove()

顾名思义,remove()方法就是移除,它有时会为信息的提取带来非常大的便利。下面有一段HTML文本:

html = ‘‘‘ <div class="wrap"> Hello, World <p>This is a paragraph.</p> </div> ‘‘‘ from pyquery import PyQuery as pq doc = pq(html) wrap = doc(‘.wrap‘) print(wrap.text())

 

现在想提取Hello, World这个字符串,而不要p节点内部的字符串,需要怎样操作呢?

这里直接先尝试提取class为wrap的节点的内容,看看是不是我们想要的。运行结果如下:

这个结果还包含了内部的p节点的内容,也就是说text()把所有的纯文本全提取出来了。如果我们想去掉p节点内部的文本,可以选择再把p节点内的文本提取一遍,然后从整个结果中移除这个子串,但这个做法明显比较烦琐。

这时remove()方法就可以派上用场了,我们可以接着这么做:

wrap.find(‘p‘).remove() print(wrap.text())
转载请注明原文地址: https://www.6miu.com/read-5039768.html

最新回复(0)