0%

#案例 #0.通过pyquery定位如下html源码中的第二对儿ul中的li文本(使用CSS选择器实现,不要用下标索引)。

案例 #0.通过pyquery定位如下html源码中的第二对儿ul中的li文本(使用CSS选择器实现,不要用下标索引)

这里先上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#案例
#0.通过pyquery定位如下html源码中的第二对儿ul中的li文本(使用CSS选择器实现,不要用下标索引)。

html = """
<div class="div">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
</ul>
<ul>
<li>9</li>
<li>10</li>
</ul>
</div>
"""
#方法一
这个可以看一下Python3网络爬虫开发实战崔庆才著的那本,第182页有具体BeautifulSoup的css选择器的应用
from bs4 import BeautifulSoup
soup=BeautifulSoup(html,'lxml')#这用的是BeautifulSoup这个解析库
print(soup.select('ul:nth-child(2)>li'))
#方法二
方法二是用的pyquery解析库,在书上的185页,也有相关css选择器的解释
from pyquery import PyQuery as pq
doc=pq(html)
print(doc('ul:nth-child(2)>li'))

这里用了一个伪类构造选择器就是这个代码,其中单引号的内的东西是,css选择器选择出来的

1
print(doc('ul:nth-child(2)>li'))

要求说第二对ul的li标签对吧,我们就可以用下面的选择器:
CSS3 结构性伪类选择器—nth-child(n)
:nth-child(n)选择器用来定位某个父元素的一个或多个特定的子元素。其中“n”是其参数,而且可以是整数值(1,2,3,4),也可以是表达式(2n+1、-n+5)和关键词(odd、even),但参数n的起始值始终是1,而不是0。也就是说,参数n的值为0时,选择器将选择不到任何匹配的元素。
简单说这案例就写nth-child(2)就可以,但是子元素就是ul,父元素就是div。

1.对上例中所有的li节点,奇数节点添加class值:active-0,偶数节点添加class值:active-1。

1
2
3
4
5
6
from pyquery import PyQuery as pq
doc=pq(html)
li=doc('li:nth-child(2n+1)')
print(li)
li.addClass('active-0')
print(li)

同样这里也是用了同一个选择器,当然这里的2n+1就是表达式,代表奇数位置

-------------本文结束感谢您的阅读-------------