CSS选择器参考

在 CSS 中,选择器是一种选择HTML元素的模式,用于选择需要添加样式的元素,比如通过表达式选中哪些div标签等,为元素标签添加样式。

而在编写爬虫时,可以通过CSS选择表达式定位到要获取信息的HTML标签或属性等等,可以非常方便的帮助我们提取需要的信息。

选择器分类参考表

选择器示例学习CSS的教程
类型选择器h1类型选择器
通配选择器*通配选择器
类选择器.box类选择器
ID选择器#uniqueID选择器
标签属性选择器a[title]标签属性选择器
后代选择器article p后代选择器(空格)
子代选择器article > p子代选择器(大于号)
相邻兄弟选择器h1 + p相邻兄弟
通用兄弟选择器h1 ~ p通用兄弟
伪类选择器p:first-child伪类
伪元素选择器p::first-line伪元素

选择器详细参考表

“CSS” 列指示该属性是在哪个 CSS 版本中定义的。(CSS1、CSS2 还是 CSS3。)

选择器例子例子描述CSS
.class.intro选择 class=“intro” 的所有元素。1
#id#firstname选择 id=“firstname” 的所有元素。1
**选择所有元素。2
elementp选择所有 <p> 元素。1
element1,element2div,p选择所有 <div> 元素和所有 <p> 元素。1
element1 element2div p选择 <div> 元素内部的所有 <p> 元素。1
element1>element2div>p选择父元素为 <div> 元素的所有 <p> 元素。2
element1+element2div+p选择紧接在 <div> 元素之后的所有 <p> 元素。2
element1~element2p~ul选择前面有 <p> 元素的每个 <ul> 元素。3
[attribute][target]选择带有 target 属性所有元素。2
[attribute=value][target=_blank]选择 target="_blank" 的所有元素。2
[attribute~=value][title~=flower]选择 title 属性包含单词 “flower” 的所有元素。2
[attribute|=value][lang|=en]选择 lang 属性值以 “en” 开头的所有元素。2
[attribute^=value]a[src^=“https”]选择其 src 属性值以 “https” 开头的每个 <a> 元素。3
[attribute$=value]a[src$=".pdf"]选择其 src 属性以 “.pdf” 结尾的所有 <a> 元素。3
[attribute*=value]a[src*=“abc”]选择其 src 属性中包含 “abc” 子串的每个 <a> 元素。3
:linka:link选择所有未被访问的链接。1
:visiteda:visited选择所有已被访问的链接。1
:activea:active选择活动链接。1
:hovera:hover选择鼠标指针位于其上的链接。1
:focusinput:focus选择获得焦点的 input 元素。2
:first-letterp:first-letter选择每个 <p> 元素的首字母。1
:first-linep:first-line选择每个 <p> 元素的首行。1
:beforep:before在每个 <p> 元素的内容之前插入内容。2
:afterp:after在每个 <p> 元素的内容之后插入内容。2
:lang(language)p:lang(it)选择带有以 “it” 开头的 lang 属性值的每个 <p> 元素。2
:first-childp:first-child选择一组<p>兄弟元素中的第一个<p>元素。2
:first-of-typep:first-of-type选择一组<p>兄弟元素中的第一个<p>元素。与:first-child类似,但可嵌套选择,参考示例 :first-of-type3
:last-of-typep:last-of-type选择一组<p>兄弟元素中的最后一个<p>元素。3
:only-of-typep:only-of-type选择属于其父元素唯一的 <p> 元素的每个 <p> 元素。3
:only-childp:only-child选择属于其父元素的唯一子元素的每个 <p> 元素。3
:nth-child(n)p:nth-child(2)选择属于其父元素的第二个子元素的每个 <p> 元素。3
:nth-last-child(n)p:nth-last-child(2)同上,从最后一个子元素开始计数。3
:nth-of-type(n)p:nth-of-type(2)选择属于其父元素第二个 <p> 元素的每个 <p> 元素。3
:nth-last-of-type(n)p:nth-last-of-type(2)同上,但是从最后一个子元素开始计数。3
:last-childp:last-child选择属于其父元素最后一个子元素每个 <p> 元素。3
:root:root选择文档的根元素。3
:emptyp:empty选择没有子元素的每个 <p> 元素(包括文本节点)。3
:target#news:target选择当前活动的 #news 元素。3
:enabledinput:enabled选择每个启用的 <input> 元素。3
:disabledinput:disabled选择每个禁用的 <input> 元素3
:checkedinput:checked选择每个被选中的 <input> 元素。3
:not(selector):not(p)选择非 <p> 元素的每个元素。3
::selection::selection选择被用户选取的元素部分。3

特殊说明

:first-child与:first-of-type区别

参考示例 :first-of-type

下面示例展示了二者的区别:

html
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head> <title>clear everything</title><head>
  <body>
    <p class="p1">some text</p>
    <div>
      <p class="p2">some text</p>
      <div>
        <p class="p3">some text</p>
      </div>
      <p class="p4">some text</p>
    </div>
    <p class="p5">some text</p>
  </body>
</html>
css
1
2
3
4
5
6
7
p:first-child {
color:red;
}

p:first-of-type {
  text-decoration: line-through;
}

效果如下:

first-child_vs_first-of-type

总结::first-child 伪类选择一个元素,该元素是一组同级元素中的第一个元素(前提条件:它必须是其父元素的第一个子元素)。另一方面, :first-of-type 选择一组同级元素中指定类型的第一个元素,无论它是否是其父元素的第一个子元素。

二者并没有那个更好用之说,根据选择需求不同,使用的场景不同罢了。

存在即有道理。

原文作者: 根叔

原始链接: https://www.learnhard.cn/python_spider/007.css%E9%80%89%E6%8B%A9%E5%99%A8%E5%8F%82%E8%80%83/

发表时间: 2024-08-06 12:51:22 +0800 CST

版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可