Python——CSS(层叠样式表,Cascading Style Sheets)、选择器(Selectors)

CSS(层叠样式表,Cascading Style Sheets)是一种用于描述文档样式和布局的样式表语言。它可以与HTML结合使用,用于控制网页的外观和格式。以下是CSS的主要特点和一些基本概念:

基本概念:

  1. 选择器(Selectors):

    • 选择器是CSS规则的一部分,用于选择要应用样式的HTML元素。
    • 例如,p 选择器选择所有 <p> 元素,.class 选择器选择具有指定类的元素,#id 选择器选择具有指定id的元素。
  2. 属性(Properties):

    • 属性是要设置的样式的具体特征,如颜色、字体大小、边框等。
    • 例如,color: red; 设置文本颜色为红色,font-size: 16px; 设置字体大小为16像素。
  3. 值(Values):

    • 属性的值定义了属性的具体样式。
    • 例如,font-family: "Arial", sans-serif; 设置字体族为Arial,如果Arial不可用,则使用sans-serif。
  4. 规则(Rules):

    • 规则由选择器、属性和值组成,定义了要应用于特定元素的样式。
    • 例如,p { color: blue; } 定义了所有 <p> 元素的文本颜色为蓝色。

CSS的结构:

一般来说,CSS规则的结构如下:

selector {
    property: value;
    /* more properties and values */
}
  • 选择器(selector):选择要应用样式的HTML元素。
  • 属性(property):定义要修改的样式特征。
  • 值(value):指定要应用于属性的具体样式。

CSS的3种引用类型:

1、内联样式(Inline Styles):

在HTML元素内部使用style属性设置样式。

<div style="border: 1px solid red; background:pink; width: 100px; height: 100px;">这是一段红底黑字</div>

内联样式的配置虽然是直观的,可以直接操作该段文字的格式样式,但是想把所有字体都统一成一个样式,就需要用到全局的css选择器进行全局设置。

2、嵌入样式(Internal Styles)——选择器(selector):

1、在HTML文档的<head></head>内使用<style>标签定义全局样式。

2、在<style>设置一个元素选择器div {}在大括号中配置全局所有<div>元素的样式。

<head>
    <style>
        div {
            border: 1px solid red;
            background: pink;
            width: 100px;
            height: 100px;
            color: black;
        }
    </style>
</head>
<body>
    <div>周杰伦</div>
    <div>林俊杰</div>
    <div class="deyunshe">郭德纲</div>
    <div class="deyunshe">于谦</div>
    <span class="deyunshe">岳云鹏</span>
</body>

3、类选择器:.class{}

用这种混合使用的方法,我们可以把所有<div>元素标签的样式和所有class="deyunshe"类标签的文字分别设置

这里注意,虽然岳云鹏不是<div>的元素标签,但是他的类<class>和郭德纲、于谦是相同的

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CSS样式</title>
    <style>
        /* 元素选择器 */
        div {
            border: 1px solid red;
            background: pink;
            width: 60px;
            height: 40px;
            color: black;
        }
        /* 类选择器 */
        .deyunshe{
            color: red;
        }

        /* ID选择器 */
        #JAY{
            border: 1px solid blue;
        }
    </style>
</head>
<body>
    <div id="JAY">周杰伦</div>
    <div>林俊杰</div>
    <div class="deyunshe">郭德纲</div>
    <div class="deyunshe">于谦</div>
    <span class="deyunshe">岳云鹏</span>
</body>
</html>

CSS中有多种选择器,它们允许你以不同的方式选择HTML元素以应用样式。以下是一些常见的CSS选择器:

  1. 元素选择器(Element Selector):

    • 选择HTML文档中所有特定类型的元素。
    • 例如:div 选择所有 <div> 元素。
  2. 类选择器(Class Selector):

    • 选择具有特定类的元素。
    • 例如:.my-class 选择所有具有 class="my-class" 的元素。
  3. ID选择器(ID Selector):

    • 选择具有特定ID的元素。
    • 例如:#my-id 选择具有 id="my-id" 的元素。
  4. 属性选择器(Attribute Selector):

    • 选择具有特定属性或属性值的元素。
    • 例如:[type="text"] 选择所有具有 type="text" 属性的元素。
  5. 后代选择器(Descendant Selector):

    • 选择作为某个元素后代的元素。
    • 例如:div p 选择所有 <p> 元素,只要它们是 <div> 元素的后代。
  6. 子元素选择器(Child Selector):

    • 选择作为某个元素子元素的元素。
    • 例如:ul > li 选择所有 <li> 元素,只要它们是 <ul> 元素的直接子元素。
  7. 伪类选择器(Pseudo-class Selector):

    • 选择处于特定状态的元素,例如鼠标悬停、访问过的链接等。
    • 例如:a:hover 选择所有鼠标悬停在 <a> 元素上的元素。
  8. 伪元素选择器(Pseudo-element Selector):

    • 选择元素的特定部分,例如元素的第一行或第一个字母。
    • 例如:p::first-line 选择所有 <p> 元素的第一行。
  9. 通用选择器(Universal Selector):

    • 选择所有元素。
    • 例如:* 选择所有元素。

这些选择器可以单独使用,也可以组合使用,以便更精确地选择目标元素。通过合理使用这些选择器,你可以有效地控制样式的应用范围,从而实现灵活而精确的样式设计。

Python爬虫学习CSS的关键点:

对于HTML页面来说:

选择器是选择标签,添加样式。

python的爬虫来说:

选择器是选择标签,获取数据,爬虫对样式毫不关心

 

3、外部样式表(External Stylesheet)——单独的CSS文件:

如果你更倾向于将样式放在一个独立的CSS文件中,可以创建一个名为 styles.css 的文件,然后在HTML中链接这个样式表:

/* styles.css */
div {
    border: 1px solid red;
    background: pink;
    width: 100px;
    height: 100px;
    color: black;
}

在HTML中链接样式表:

<link rel="stylesheet" type="text/css" href="styles.css">

 

CSS的特性:

  1. 层叠性(Cascading):

    • 多个样式规则可以同时应用到同一个元素,层叠性定义了它们的优先级和应用顺序。
  2. 继承性(Inheritance):

    • 子元素可以继承父元素的某些样式,例如文字颜色和字体。
  3. 优先级(Specificity):

    • 定义了当多个规则冲突时,哪些规则具有更高的优先级。
  4. 盒模型(Box Model):

    • 元素在页面上被表示为矩形框,包括内容区域、内边距、边框和外边距。
  5. 响应式设计(Responsive Design):

    • CSS可以用于创建响应式的布局,使网页在不同设备和屏幕尺寸上呈现良好。

CSS是构建现代网页的重要技术之一,通过它,开发者可以控制页面的外观和布局,提供更好的用户体验。

 

多层选择器套用:

关系选择器:

div p(后代选择器):

选择所有 <p> 元素,只要它们是 <div> 元素的后代。换句话说,它匹配所有在 <div> 元素内部的 <p> 元素,无论是深度多深。

div p {
    /* 样式规则 */
}

div > p(子元素选择器):

选择所有 <p> 元素,只要它们是 <div> 元素的直接子元素。这意味着只有在 <div> 元素下一级的 <p> 元素会被匹配。

div > p {
    /* 样式规则 */
}

div + p(相邻兄弟选择器):

选择紧接在 <div> 元素后面的所有 <p> 元素。(不是在div里面,是在div外面,与div同级别的紧紧挨着的P元素意思)。这个选择器匹配 <div> 元素屁股后面紧挨着的 <p> 元素(不是紧挨着都不行,不能被别的元素隔开)。

div + p {
    /* 样式规则 */
}

div ~ p(通用兄弟选择器):

选择与 <div> 元素在同一级别的所有 <p> 兄弟元素。这个选择器匹配 <div> 元素后面的所有 <p> 元素,而不仅仅是紧接在后面的一个。

div ~ p {
    /* 样式规则 */
}

直接看案例和注释吧

<head>
    <meta charset="UTF-8">
    <title>CSS多层选择器</title>
    <style>
        /* 空格多层 */
        section span{
            /* section span: 表示找到section内部的span,这里的中间空格是n层,不论多少层*/
            color: red;
        }
        /* >一层 */
         section > span{
             /* section > span: 表示找到section内第一层的span */
             color: red;
         }
         /* >一层>又一层 */
         section > div > span{
             /* section >div > span: 表示找到section内第一层的div里第一层span */
             color: red;
         }
         /* >一层>又一层 */
         section > * > span{
             /* section >* > span: 表示找到section内第一层的?里第一层span */
             color: red;
         }
         /* 元素中的类 */
         span.guonei{
             /* span元素中guonei的类 */
             color: blue;
         }
    </style>

</head>
<body>
<div>
    <span class="guonei">周杰伦</span>
    <span class="guonei">林俊杰</span>
    <span >小甜甜布莱尼</span>
</div>
<section>
    <span>郭德纲</span>
    <span>于谦</span>
    <span>岳云鹏</span>

 

组合选择器:

组合选择器是将多个选择器组合在一起,以选择满足多个条件的元素。以下是一些组合选择器的例子:

  1. 并集选择器(Multiple Selectors):

    • 语法:A, B
    • 选择所有同时满足 A 和 B 选择器条件的元素。
    h1, h2 {
        /* 选择所有 h1 和 h2 元素 */
    }
  2. 交集选择器(Descendant Selector):

    • 语法:A B
    • 选择同时满足 A 和 B 选择器条件的元素。
    .container p {
        /* 选择具有类名 container 的元素内的所有 p 元素 */
    }

通用选择器:

通用选择器用于匹配所有元素,无论是什么类型的元素。以下是通用选择器的例子:

  • 语法:*
  • 选择所有元素。
* {
    /* 选择所有元素,应用相同的样式 */
}

通用选择器可以用于重置样式或全局设置,但在实际应用中要慎用,因为它可能会导致不必要的性能开销。应尽量精确地选择目标元素。

元素选择器:

自定义了一个元素,类似class的感觉,但不是class。

<head>
    <meta charset="UTF-8">
    <title>元素选择器</title>
  <style>
    div[qiguai="tang"]{
      color: red;
    }
    div[qiguai]{
      border: 1px solid blue;
      width: 100px;
    }
  </style>
</head>
<body>
    <div>西红柿汤</div>
    <div qiguai="tang">胡辣汤</div>
    <div qiguai>酸梅汤</div>

</body>

1、会给胡辣汤进行红色标记

2、会给胡辣汤和酸梅汤套蓝色边框

伪类选择器:

<head>
    <meta charset="UTF-8">
    <title>伪类选择器</title>
    <style>
        div:before{
            content:"给你5块钱";
            color: red;
            background: pink;
        }
    </style>
</head>
<body>
    <div>
        我爱周杰伦
    </div>
</body>

我们在正常做div爬虫的时候,只能拿到"我爱周杰伦"几个字,但是content:"给你5块钱"content:"请我去吃饭"我们是拿不到的。因为这部分是加载在CSS里的。这是一直反爬虫的方法,解决方法就是检查style部分。

 

 

练习题:

1、领悟一下“层”的含义

2、设置选取33行的选择器

从最外层body出发,筛选掉下面原本冲突的部分

未来,python可以利用BeautifulSoup模块,使用css的选择器对文字进行提取

from bs4 import BeautifulSoup

b = BeautifulSoup(www.baidu.com)
b.select("div > .chi > div > div >span.hehe")

 

nth-child标签

:nth-child 伪类用于选择父元素下的特定位置的子元素。这个伪类允许你根据子元素的位置选择元素,并且可以结合使用不同的参数和表达式。

语法:

/* 选择父元素下所有奇数位置的子元素 */
li:nth-child(odd) {
    /* 样式规则 */
}
  • n 是整数,表示序号。
  • a 是周期的倍数。
  • b 是起始位置的偏移量。

以下是一些示例:

  1. 选择偶数位置的元素:

    /* 选择父元素下所有偶数位置的子元素 */
    li:nth-child(even) {
        /* 样式规则 */
    }
  2. 选择奇数位置的元素:

    /* 选择父元素下所有奇数位置的子元素 */
    li:nth-child(odd) {
        /* 样式规则 */
    }
  3. 选择特定位置的元素:

    /* 选择父元素下第三个子元素 */
    li:nth-child(3) {
        /* 样式规则 */
    }
  4. 选择周期性的元素:

    /* 选择父元素下每 3 个元素为一个周期的子元素 */
    li:nth-child(3n) {
        /* 样式规则 */
    }
  5. 选择特定起始位置和周期性的元素:

    /* 选择父元素下从第 2 个子元素开始,每 3 个元素为一个周期的子元素 */
    li:nth-child(3n+2) {
        /* 样式规则 */
    }

这些选择器对于网格布局、斑马条纹效果等场景非常有用,可以更精确地选择和应用样式于特定位置的子元素。

posted @ 2023-12-18 14:33  Magiclala  阅读(69)  评论(0编辑  收藏  举报