python css selector_Python3 CssSelector定位方式实例详解

例子:

html = """

  • 哈哈
  • Two
  • Three
  • Four
呵呵呵

百度一下

第一段

第2段

第3段

第4段

大师傅大师傅!!

第5段

第6段

嘿嘿嘿
  • This is Text

"""

基本css选择器

CSS选择器中,最常用的选择器如下:

选择器描述举例

*通配选择器,选择所有的元素*

选择特定类型的元素,支持基本HTML标签h1

.选择具有特定class的元素。.class1

.特定类型和特定class的交集。(直接将多个选择器连着一起表示交集)h1.class1

#选择具有特定id属性值的元素#id1

if __name__=='__main__':

html = etree.HTML(html)

Csses = html.cssselect('*')

for css in Csses:

print (css.text)

该程序会输出所有标签的文本内容,即*表示选择所有的元素

Csses = html.cssselect('li')

for css in Csses:

print (css.text)

输出结果:

哈哈

Two

Three

Four

该程序会输出“li”标签的文本内容,即选择特定类型的元素,换成其他标签则显示相应的文本

Csses = html.cssselect('.text')

for css in Csses:

print (css.text)

输出结果:

This is Text

代码片中的.text表示选择class属性值为text的标签。

Csses = html.cssselect('li.four1')

for css in Csses:

print (css.text)

输出结果:

Four

代码片中的li.four1表示选择所有的li标签,class属性值包含four1的标签。

Csses = html.cssselect('#inner')

for css in Csses:

print (css.text)

输出结果:

呵呵呵

代码片中的#inner表示id属性值为inner的标签。

属性选择器

除了最基本的核心选择器外,还有可以基于属性的属性选择器:

​选择器描述举例

[attr]选取定义attr属性的元素,即使该属性没有值[placeholder]

[attr="val"]选取attr属性等于val的元素[placeholder="请输入关键词"]

[attr^="val"]选取attr属性开头为val的元素[placeholder^="请输入"]

[attr$="val"]选取attr属性结尾为val的元素[placeholder$="关键词"]

[attr*="val"]选取attr属性包含val的元素[placeholder*="入关"]

[attr~="val"]选取attr属性包含多个空格分隔的属性,其中一个等于val的元素[placeholder~="关键词"]

Csses = html.cssselect('[href]')

for css in Csses:

print (css.text)

输出结果:

百度一下

代码片中的[href]表示包含href属性的所有标签

Csses = html.cssselect('[class=two]')

for css in Csses:

print (css.text)

输出结果:

Two

代码片中的[class=two]表示class属性值为two的所有标签

Csses = html.cssselect('[class^=t]')

for css in Csses:

print (css.text)

输出结果:

Two

Three

This is Text

代码片中的[class^=t]表示class属性值以t开头的所有标签

Csses = html.cssselect('[class$=e]')

for css in Csses:

print (css.text)

输出结果:

哈哈

Three

代码片中的[class$=e]表示class属性值以e结尾的所有标签

Csses = html.cssselect('[class*=r]')

for css in Csses:

print (css.text)

输出结果:

Three

Four

代码片中的[class*=r]表示class属性值包含r字母的所有标签

Csses = html.cssselect('[id~=inner]')

for css in Csses:

print (css.text)

输出结果:

呵呵呵

嘿嘿嘿

代码片中的[id~=inner]表示id属性值包含inner的所有标签,inner是一个单独的词,即如果有多个属性值,则必须以空格隔开

关系选择器

有一些选择器是基于层级之间的关系,这类选择器称之为关系选择器。

选择器描述举例

第二个选择器为第一个选择器的后代元素,选取第二个选择器匹配结果.class1 h1

> 第二个选择器为第一个选择器的直接子元素,选取第二个选择器匹配结果.class1 > *

+ 第二个选择器为第一个选择器的兄弟元素,选取第二个选择器的下一兄弟元素.class1 + [lang]

~ 第二个选择器为第一个选择器的兄弟元素,选取第二个选择器的全部兄弟元素.class1 ~ [lang]

Csses = html.cssselect('div li')

for css in Csses:

print (css.text)

输出结果:

哈哈

Two

Three

Four

代码片中的div li表示div标签下的所有li标签,中间用空格隔开

Csses = html.cssselect('div>a')

for css in Csses:

print (css.text)

输出结果:

百度一下

代码片中的div>a表示div标签下的所有a子标签,a必须是div的子标签

Csses = html.cssselect('li+li')

for css in Csses:

print (css.text)

输出结果:

Two

Three

Four

代码片中的li+li表示li标签和li标签是兄弟标签,满足这样条件的一共有三个。

Csses = html.cssselect('a+p')

for css in Csses:

print (css.text)

输出结果:

第一段

Csses = html.cssselect('a~p')

for css in Csses:

print (css.text)

输出结果:

第一段

第2段

第3段

第4段

第5段

第6段

联合选择器与反选择器

利用联合选择器与反选择器,可以实现与和或的关系。

选择器描述举例

,属于第一个选择器的元素或者是属于第二个选择器的元素h1, h2

:not()不属于选择器选中的元素:not(html)

Csses = html.cssselect('li,p')

for css in Csses:

print (css.text)

输出结果:

哈哈

Two

Three

Four

第一段

第2段

第3段

第4段

第5段

第6段

代码片中的li,p表示选择所有的li标签和p标签

Csses = html.cssselect(':not([class])')

for css in Csses:

print (css.text)

输出结果:

None

None

呵呵呵

百度一下

第一段

第2段

第3段

第4段

大师傅大师傅!!

第5段

第6段

嘿嘿嘿

代码段中的:not([class]表示选择不包含class属性的所有标签。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值