案例 #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
|
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') 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就是表达式,代表奇数位置